重複せずにファイル名をランダムに変更

重複せずにファイル名をランダムに変更

ファイル名の多いフォルダがありますが、そのうちのいくつかは本当に奇妙で意味がないので、名前を次に変更したいとします。

File-1
File-2
File-3
..

私はこれを試しました(エコはtryngのためのものです)

for name in *; do echo mv $name File-`echo $(( RANDOM % (10 - 5 + 1 ) + 1 ))`;done

しかし、重複をたくさん与えてください。

mv bio1 file-3
mv memory23 file-1
mv mernad file-3
mv nio2 file-4
mv nun3 file-4

答え1

shuf(GNU coreutilsパッケージから)を使用することもできます。準備単一ランダムサンプルの代わりに - 次のようになります。

for f in *; do read i; echo mv -- "$f" "file-$i"; done < <(shuf -i 1-10)

または(おそらくより良いでしょう)シャッフルファイル名-その後、順番に名前を変更します。

i=1; shuf -z -e -- * | while IFS= read -rd '' f; do echo mv -- "$f" "File-$((i++))"; done

答え2

pre=file ;
for old in * ;
 do new=`xxd -l 16 -ps /dev/urandom` ;
 while [ -f "$pre-$new" ] ; do new=`xxd -l 16 -ps /dev/urandom` ; done ;
 mv "$old" "$pre-$new" ;
done ;

xxd通常、package.jsonを含むバイナリファイルですvim-common

xxd -エル属性は、所望の任意の長さを表す。

xxd -PSPostScriptの純粋な16進ダンプスタイル名を取得します(例:a4c794f3861f5d3e36ca9b0afd15ceab)。

/dev/urandomLinuxカーネル擬似乱数ジェネレータはありますか?そうでない場合は、次のように書きます。mknod -m 444 /dev/urandom c 1 9

while [ -f "$pre-$new" ]コマンド保証する、同じ名前の他のファイルはありません。

このコマンドは通常パッケージ[に含まれています。coreutils

変数はpre名前プレフィックスとして選択されます。プレフィックスが必要ない場合は、空白のままにしておくことができます。pre= ;

たとえば、

file 1
file 2
file 3
file 4
file 5

になるpre=file

file-062b9bcde91f1c56084956d175cfdfa3
file-3e7ec1bd5324a485a3402b106d320f73
file-648cf4550c70b2531350f231670fc982
file-074b2828b004f45581784ff1705c7ff3
file-481be2bb21f4b1e637293ae0ecf14f74

答え3

重複した値がランダムに返されることがあります。順番に数字を生成するのはどうですか?

count=0
for name in *; do count=`expr $count + 1` ; echo mv $name File-$count;done

答え4

ファイル名を順番に指定するには(たとえば、File-1 -> File-n)、順番に実行する必要があります。 -

count=0; for i in * ; do mv $i file-${count}; ((count++)); done 

関連情報