如何一次性重命名大量随机命名的文件?

如何一次性重命名大量随机命名的文件?

在一个目录中,我有大量随机命名的'.wav'文件。例如

090913yui.wav
jiyafa123.wav
.
.
.
awe-6rt.wav

我想将文件名更改为

file1.wav
file2.wav
.
.

等等

谁能帮助我如何做同样的事情?我只能通过终端访问服务器。所以只需要通过一些命令来完成。

答案1

假设文件名通配模式与*.wav您想要更改的所有名称相匹配,那么您可以使用以下循环以您想要的方式重命名匹配的名称:

n=1
for name in *.wav; do
    while [ -e "file$n.wav" ]; do n=$((n+1)); done
    mv -- "$name" "file$n.wav"
done

这会迭代所有匹配的名称。对于每个名称,它会找到一个整数$n,使得该名称file$n.wav尚不存在。然后它将当前名称更改为该名称。

答案2

使用珀尔的rename(可在任何操作系统和任何 shell 中使用,工具箱中必须有):

rename -n 's/.*/"file" . ++$::c . ".wav"/se' ./*.wav

给出:

rename(090913yui.wav, file1.wav)
rename(jiyafa123.wav, file2.wav)

或者使用零填充:

rename -n 's/.*/"file" . sprintf("%.3d", ++$::c) . ".wav"/se' ./*.wav

给出:

rename(./090913yui.wav, file001.wav)
rename(./jiyafa123.wav, file002.wav)

删除-n开关,又名试运行当你的尝试令人满意时重命名为真实的

答案3

使用 zsh 的 zmv:

autoload -Uz zmv
n=0; zmv -n '*.wav' 'file$((++n)).wav'

或者用l0 将数字填充到宽度 3,以便文件在输出ls和大多数其他内容中按数字排序:

n=0; zmv -n '*.wav' 'file${(l[3][0])$((++n))}.wav'

如果满意,请删除-n(试运行)。它将提前检查是否存在任何潜在冲突。

如果某些文件已被重命名,您将初始化n为现有文件的最高数值file<number>.wav并将*.wav模式更改为(^file<->).wav.

相关内容