ファイルをシャッフルして順番に名前を変更する方法

ファイルをシャッフルして順番に名前を変更する方法

現在 1 から 1000 までの連番が付けられた .png 画像のセットがあります。これらの画像を 1 から 1000 までのランダムな番号に再割り当てして、連番の範囲は同じにして、各番号の下の画像が同じではなくなるようにするにはどうすればよいでしょうか。

答え1

次のように実行できます:

names=({1..1000}.png)
new_names=($(shuf -e {1..1000}.png.tmp))
for n in "${!names[@]}"; do
    echo mv "${names[$n]}" "${new_names[$n]}"
done && rename -n 's/\.tmp$//' *.tmp
  • 2つの配列を作成し$names$new_names
  • 既存のファイルを上書きしないように、 などの名前を付ける必要があります。.tmpこれを で修正しますrename
  • 配列のキーをループし、mvそれぞれに対して実行します。

注: コマンドを実際に実行するには、からechoと を削除します。-nrename

関連情報