在一个目录中,我有大量随机命名的'.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'
或者用l
0 将数字填充到宽度 3,以便文件在输出ls
和大多数其他内容中按数字排序:
n=0; zmv -n '*.wav' 'file${(l[3][0])$((++n))}.wav'
如果满意,请删除-n
(试运行)。它将提前检查是否存在任何潜在冲突。
如果某些文件已被重命名,您将初始化n
为现有文件的最高数值file<number>.wav
并将*.wav
模式更改为(^file<->).wav
.