ファイル名ディレクトリがあるとしましょう。
- File_010.ext
- File_011.ext
- ...
- File_99.ext
各ファイルをインポートし、重複することなくディレクトリの別の名前にランダムに名前を変更してスキャンするとき、ディレクトリは同じように見えますが、内容を再配置するための最も簡単な方法は何ですか?
ベストアンサー1
これはshuf
GNU 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番目のループはサフィックスを削除します。
上記は、ファイル名にタブや改行文字が含まれていないと仮定しています。
(実現できます。シャッフリングアルゴリズムシェルで手動で実行しますが、少し混乱しているようです。 )