私はMacBook Pro OS X 2013モデルを使用しています。list.txt
改行で区切られたテキストファイルのファイル名のリストがあります。
list.txtはまったく同じですが、リストは非常に長くなります。
e.jpeg
x.jpeg
a.jpeg
m.jpeg
p.jpeg
l.jpeg
e.jpeg
同じファイルをターゲットフォルダに何千回もコピーするにはこれらのコマンドが必要で、重複したファイル名の問題が発生します。ファイルを再コピーする必要がありますが、新しいフォルダにコピーするときに順番に名前を変更すると、名前が重複することはないと思います。私はほぼ同じものをコピーしています。 40個のファイルは、表示される順序に従って数千回繰り返されますlist.txt
。各ファイルのサイズは100KBから250KBです。
各ファイルをリストされた順番でlist.txt
別のフォルダにコピーし、順番に名前を変更したいと思います。
私はそれを使ってファイルを新しいフォルダにコピーしましたが、うまくいきましたが、重複したエントリを保持したり名前を変更したりしませんでした。
cp `cat list.txt` new-folder/
私はこれを順番に名前を変更するために使用しますが、間違ったフォルダから名前を変更します。
find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash
私はこの方法を使ってそれらを組み合わせようとしましたが、成功しませんでした。
cat [filename] | while read line; do [command] "$line"; done
私は次のような多くの組み合わせを試しました。
cp `cat list.txt` new-folder/ | while read line; do find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash "$line"; done
これらのファイルはプロジェクトの追加日付/作成日より前に使用されるため、list.txtの順序で新しいフォルダに表示する必要があります。コピーされ、名前が変更されるまで、各行で遅延を実行する必要があります。
答え1
ファイルリストからシェルスクリプトを作成しようとしないでください。正しく実行するのは難しく、必要なものすべてを直接実行するよりも、ほぼ常にはるかに困難です。代わりに、利用可能なファイル名がある場合は、名前を変更し続けます。
#!/bin/sh
number=1
while IFS= read -r old_name; do
new_name=$(printf %04d "$number").jpeg
number=$((number+1))
mv -- "$old_name" "new-folder/$new_name"
done <list.txt