Mac OS X は cp と cat を組み合わせて、リスト内のファイルを順次コピーし、名前を変更します。

Mac OS X は cp と cat を組み合わせて、リスト内のファイルを順次コピーし、名前を変更します。

私は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

関連情報