ファイル名リストから複数のファイルを新しいフォルダに移動する

ファイル名リストから複数のファイルを新しいフォルダに移動する

list.txt にファイル名のリストがあり、そこには「abc1.png、abc2.png、abc3.png...」があります。

しかし、ファイルがどこにあるかディレクトリがわかりません。

txt ファイル内のすべてのファイルを検索し、新しいフォルダーに移動したいと思います。

答え1

必要がある各ファイル名を1行ずつ読み取るfind、オプションを使用してそれを試しname、最後にmvターゲットにします。

while IFS= read -r filename; do
    find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt

{}見つかったファイル パスに置き換えられます。

答え2

ファイル名に ", " や改行が含まれておらず、各ファイルが list.txt に 1 つだけ存在すると仮定します。当然、newdirectory を目的のディレクトリに変更する必要もあります。list.txt に欠落しているファイルがある場合、そのファイルはコピーされません (情報も提供されません)。

sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;

答え3

これは bash を使えば簡単です:

まず find でファイルを見つけ、その出力を別のファイルにリダイレクトします。

for arg in $(cat list.txt); do find / -name $arg -print >> files_with_path.txt; done

次にファイルを mv します:

for arg in $(cat files_with_path.txt); do mv $arg /your/dest/folder; 完了

関連情報