ファイル名の多いフォルダがありますが、そのうちのいくつかは本当に奇妙で意味がないので、名前を次に変更したいとします。
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/urandom
Linuxカーネル擬似乱数ジェネレータはありますか?そうでない場合は、次のように書きます。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