使用随机字符串重命名 Bash 中的多个文件

Rename multiple files in Bash with random strings

假设任意数量的文件具有随机名称和相同的文件扩展名(例如,file1.txtfile2.txt...fileN.txt)。您如何使用随机字符串可靠地重命名它们?

例如,file1.txt, file2.txt...fileN.txtasdfwefer.txt, jsdafjk.txt... 或 any combination of letters from latin alphabet].txt

算法步骤如下:

  • 迭代文件
  • 获取名称和扩展名
  • 计算一个随机字符串
  • 使用 mv 命令重命名

script.sh

location=

echo "before"
find $location

for full_file_name in $location/*.*
do
    filename=$(basename -- "$full_file_name")
    extension="${filename##*.}"
    filename="${filename%.*}"
    new_name=$(cat /dev/urandom | tr -dc 'a-z' | fold -w 32 | head -n 1)
    echo "rename from: $filename.$extension to: $new_name.$extension"
    mv $full_file_name "$location/$new_name.$extension"
done

echo "after"
find $location

执行

bash script.sh /tmp/workspace/input

结果

脚本已经过测试,演示文件的结果是here

我能想到的获得 random-letters 字符串的最快方法是

head -c24 /dev/urandom | base64 | tr -dc a-zA-Z

所以

randomname() { head -c24 /dev/urandom | base64 | tr -dc a-zA-Z; }
for f in file*.txt; do mv "$f" `randomname`.txt; done

即使列表很大,您发生碰撞的几率也会下降到 one-in-a-billion 范围内。在 randomname 的输出末尾添加一个序列号,它也会消失。