ディレクトリ内のファイル名をランダムに混在させる方法

ディレクトリ内のファイル名をランダムに混在させる方法

ファイル名ディレクトリがあるとしましょう。

  • File_010.ext
  • File_011.ext
  • ...
  • File_99.ext

各ファイルをインポートし、重複することなくディレクトリの別の名前にランダムに名前を変更してスキャンするとき、ディレクトリは同じように見えますが、内容を再配置するための最も簡単な方法は何ですか?

ベストアンサー1

これはshufGNU coreutilsの使い方です:

paste <(printf "%s\n" *) <(printf "%s\n" * | shuf) |
  while IFS=$'\t' read -r from to; do mv -- "$from" "$to.new"; done

for f in *.new; do mv -- "$f" "${f%.new}"; done 

printf "%s\n" *ファイル名のリストを作成してshuf混合します。pasteある列には順序付けられたファイル名のリストがあり、もう一方の列には混在したファイル名のリストが含まれるように、2つのリストを結合します。 (使用しない場合は、一時ファイルにリストを作成できます。プロセスの交換上記のように、またはシェルがそれをサポートしていない場合IFS=$'\t'。 )IFS=$(printf '\t')$''

その後、これはループに供給され、while readリストに従ってファイル名を変更し、古いファイルを上書きしないようにサフィックスを追加します。 2番目のループはサフィックスを削除します。

上記は、ファイル名にタブや改行文字が含まれていないと仮定しています。

(実現できます。シャッフリングアルゴリズムシェルで手動で実行しますが、少し混乱しているようです。 )

おすすめ記事