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; 完了