![如何批量重命名文件并赋予其随机名称](https://linux22.com/image/1281495/%E5%A6%82%E4%BD%95%E6%89%B9%E9%87%8F%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%B9%B6%E8%B5%8B%E4%BA%88%E5%85%B6%E9%9A%8F%E6%9C%BA%E5%90%8D%E7%A7%B0.png)
我有一堆不同名称的照片。
我想给每张照片起一个随机名称(*), 我怎么做?
(*)我要把它们放在不能随机播放的数码相框里
答案1
假设所有图像都在一个文件夹中,那么这将在 Powershell 中起作用:
Get-ChildItem *.jpg | ForEach-Object{Rename-Item $_ -NewName "$(Get-Random)-$($_.Name)"}
您可能会遇到潜在的名称冲突,但默认情况下 Get-Random 返回 32 位无符号整数,范围从 0 到 Int32.MaxValue(0 到 2147483647)。您当然可以添加另一个 Get-Random 来降低发生冲突的可能性,就像在 Bash 答案中一样。
答案2
如果您手边有 bash shell,一种方法是使用$RANDOM
环境变量。它会生成 0 到 32767 之间的随机值。
如果您只有几百个文件,那么 bash 中的一个简单的 for 循环就可以正常工作。
for i in *.jpg; do mv -i "$i" ${RANDOM}.jpg; done
-i
由于我有大约 4000 个文件需要重命名,因此我很快就遇到了标志可以捕获的冲突mv
。添加另一个标志$RANDOM
可以解决这个问题。
for i in *.jpg; do mv -i "$i" ${RANDOM}${RANDOM}.jpg; done
答案3
for f in *; do ext=$(echo "$f" | sed 's|\([^.]*\)||'); mv "$f" "$(uuidgen)$ext"; done