随机重命名文件但不重复

elb*_*rna 1 scripting rename random mv

假设我有一个文件夹,里面有很多文件名,我想把它重命名为

File-1
File-2
File-3
..
Run Code Online (Sandbox Code Playgroud)

我试过这个(回声是为了尝试)

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

但给我很多重复

mv bio1 file-3
mv memory23 file-1
mv mernad file-3
mv nio2 file-4
mv nun3 file-4
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

您可能会使用shuf(来自 GNU coreutils 包),它生成排列而不是单个随机样本 - 类似

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

或者(也许更好)重新排列文件名- 然后简单地按顺序重命名它们

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