ファイルの名前をランダムな文字列に変更しようとしています。私はランダムな文字列を生成するために、this questionへの答えからいくつかのコードを取った。複数のファイルの名前をランダムな名前に変更すると、1つのファイルの名前が変更されます。
#!/bin/bash
chars=({a..z} {A..Z} {0..9})
function rand_string {
local c=$1 ret=
while((c--)); do
ret+=${chars[$((RANDOM%${#chars[@]}))]}
done
printf '%s\n' "$ret"
}
output=$(rand_string 10)
は練習のために私はいくつかのプレーンテキストファイルで$HOME/practice
でディレクトリを作りました。代わりに3人のランダムな名前を得るための、ランダムな文字列これらのファイルの名前を変更しようとすると
/Users/me/practice/testfile1.txt
/Users/me/practice/testfile2.txt
/Users/me/practice/testfile3.txt
は、私が代わりにランダムな文字列に名前を変更1つのファイルが残っています。 echo "$file" "$output"
とmv "$file" ~/practice/"$output"
の交換
for file in $HOME/practice/*
do
mv "$file" $HOME/practice/"$output"
done
#result
/Users/me/practice/i6TP3wiMDD
はランダムな文字列ではなく、すべてのファイルの新しいランダムな文字列を生成するすべてのファイルの後に繰り返されていることを私に示しています。
/Users/me/practice/testfile1.txt i6TP3wiMDD
/Users/me/practice/testfile2.txt i6TP3wiMDD
/Users/me/practice/testfile3.txt i6TP3wiMDD
私の質問は2つの一部です:
- はなぜのみ1ファイルの名前が変更されていますか?
- 名前を変更するファイルごとに新しいランダムな文字列を生成するにはどうすればよいですか?
上記のランダムな文字のスクリプトは、私の現在の理解の上にあるとも言います。私はそれがランダムな文字を生成するために動作することを知っています。しかし、それの内部の動作はまだ私にはいくぶん不明です。