Unixのファイルリストから検索と移動

Unixのファイルリストから検索と移動

ファイル名を含むリストファイルがあり、リストから一度に1つのファイル名を読み取り、複数のサブフォルダーがあるディレクトリ構造内でそのファイル名を見つけて、見つかったらdiffフォルダーに移動しようとします。

前任者:

listfile.txt

Content of the file--
filename1.txt
filename2.txt

maindir
|--subdir1
|---subdir2/filename1.txt
|---subdir3/filename2.txt

listfile.txtでファイル名を1つずつ読み、diffフォルダ(/ destfolderなど)に移動します。

どんな提案でもいいでしょう。

ありがとう、キャビン

ベストアンサー1

シェルループを使用し、find各ファイル名に対して一度呼び出します。

mkdir -p archive_dir
while IFS= read -r filename; do
    find maindir -type f -name "$filename" -exec mv {} archive_dir ';'
done <listfile.txt

ファイルが見つかった後も一致するファイル名を探し続けるため、少し非効率的です。書く引っ越した人)。

GNUを使用している場合は、最初のファイルを移動した後にプロセスが停止するようにコマンドの最後にfind追加できます。-quitfindfind

仕組みを見せてください:

$ cat listfile.txt
filename1.txt
filename2.txt
.
|-- listfile.txt
`-- maindir
    |-- subdir1
    |-- subdir2
    |   `-- filename1.txt
    `-- subdir3
        `-- filename2.txt

4 directories, 3 files

(上記のループを実行)

それから:

.
|-- archive_dir
|   |-- filename1.txt
|   `-- filename2.txt
|-- listfile.txt
`-- maindir
    |-- subdir1
    |-- subdir2
    `-- subdir3

5 directories, 3 files

関連:

おすすめ記事