文件名的零填充

文件名的零填充

我想对文件名进行零填充。如果不是所有图像都存在(例如 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     字符串。

${参数/模式/字符串}

  • 模式替换;参数被扩展并且模式与其值的最长匹配被字符串替换。

相关内容