如何在每个文件名的开头添加一个随机字母/数字?

如何在每个文件名的开头添加一个随机字母/数字?

我正在开发一个系统,希望每个文件名的首字母是随机的 - 不一定独特的,只是随机的。我希望能够通过 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

我还想指出,无论如何,这些在开始时只会产生随机数。

相关内容