我正在开发一个系统,希望每个文件名的首字母是随机的 - 不一定独特的,只是随机的。我希望能够通过 cron 作业来运行它。
例如,我可以将其指向如下文件列表
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
并将文件的名称更改为如下形式:
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 l song4.mp3 e song5.mp3
有没有办法做到这一点?
答案1
您可以使用环境变量 $RANDOM:
#!/bin/bash
for F in *.mp3 ; do
mv $F $RANDOM.$F
done
这将移动文件:
songa.mp3
song7.mp3
到
1875.songa.mp3
32654.song7.mp3
例如。
答案2
请参阅此脚本。我尝试了您想要的操作。
#!/bin/bash
for item in *.mp3
do
mv "$item" "$(cat /dev/urandom | tr -cd 'a-z' | head -c 1) $item"
done
如何随机拾取字母
这里我从中挑选字符串/dev/urandom
并删除所有不在 [az] 之间的字符,最后只保留第一个字母。
如何使用
将代码复制到一个文件,例如rename_song.sh
,使用终端授予其执行权限,如下所示,
chmod +x /path/to/rename_song.sh
复制rename_song.sh
到您有文件的目录.mp3
。从终端运行脚本(首先导航到您有.mp3
文件的目录),
./rename_song.sh
如果你有如下文件列表
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
它们将被重新命名为:
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 P song4.mp3 A song5.mp3
如果您想要字母和数字,那么请用 替换tr -cd 'a-z'
,tr -cd 'a-z0-9'
并且最好使用简单的 shell glob 而不是解析 的输出ls
。
答案3
以下是@Joseph 脚本的单行版本,您可以将其粘贴到终端中:
首先更改至所需目录:
cd /PATH/TO/DIRECTORY/
然后您可以直接从终端运行命令:
for F in $(ls *.mp3); do mv "$F" "$RANDOM.$F" ; done;
其简短版本如下:
for F in *.mp3 ; do mv "$F" "$RANDOM.$F" ; done
我还想指出,无论如何,这些在开始时只会产生随机数。