我想对文件名进行零填充。如果不是所有图像都存在(例如 1.JPEG 不存在或 99.JPEG 或 110.JPEG 不存在),我该怎么办?
$ for n in $(seq 9); do mv $n.JPEG 0$n.JPEG; done; mv: cannot stat ‘1.JPEG’: No such file or directory
我不想手动重命名,因为视频的顺序很重要。
答案1
您可以if
在循环内使用来检查文件是否存在。如果存在,则只会mv
执行操作。
for n in $(seq 9)
do
if [[ -f $n.JPEG ]]
then
mv $n.JPEG 0$n.JPEG
fi
done;
或者用一行代码:
for n in $(seq 9); do if [[ -f $n.JPEG ]]; then mv $n.JPEG 0$n.JPEG; fi done;
答案2
使用参数扩展,你可以将文件名拆分为名称和扩展名,然后将它们与printf
格式粘合在一起
#!/bin/bash
for i in *; do
mv $i $(printf %04d.%s\\n ${i/./ })
done
printf 格式:
%04d
用四个零填充数字。%s
字符串。
${参数/模式/字符串}
- 模式替换;参数被扩展并且模式与其值的最长匹配被字符串替换。