使用随机字符串重命名 Bash 中的多个文件
Rename multiple files in Bash with random strings
假设任意数量的文件具有随机名称和相同的文件扩展名(例如,file1.txt
、file2.txt...fileN.txt
)。您如何使用随机字符串可靠地重命名它们?
例如,file1.txt, file2.txt...fileN.txt
到 asdfwefer.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
的输出末尾添加一个序列号,它也会消失。
假设任意数量的文件具有随机名称和相同的文件扩展名(例如,file1.txt
、file2.txt...fileN.txt
)。您如何使用随机字符串可靠地重命名它们?
例如,file1.txt, file2.txt...fileN.txt
到 asdfwefer.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
的输出末尾添加一个序列号,它也会消失。