想要文件重命名脚本以固定长度添加数字

时间:2014-12-29 19:09:41

标签: bash shell

我有一些扩展名相同的文件:

 foo.tif
 bar.tif
 baz.tif

我想按以下格式重命名:

 foo_0001.tif
 foo_0002.tif
 etc.

我有以下BASH命令来重命名它们:

$ c=0; for file in $(ls -rt); do let c=${c}+1; mv "${file}" "foo_${c}.${file#*
 .}"; done

这给了我:

 foo_1.tif
 foo_2.tif
 foo_3.tif ...

我想要的是:

 foo_0001.tif
 foo_0002.tif
  etc.

编辑:这是最终的工作脚本:

 $ c=0; ls -rt | while read -r file; do ((++c));  mv "${file}" "$(printf 'foo_%04d.%s' "$c" "${file#*.}")"; done

2 个答案:

答案 0 :(得分:2)

do
   let ++c
   d=`printf '%04d' $c`
   mv "${file}" foo_$d
done

答案 1 :(得分:2)

您可以使用printf并使用格式说明符

执行此操作
c=0
while read -r file; do 
    ((++c))
    mv "${file}" "$(printf 'test_%04d.%s' "$c" "${file#*.}")"
done < <(ls -rt)

使用while read循环的方法比您原来的方法稍微安全一些,但有关parsing ls的通常建议适用。小心!

您可以通过将"$c"替换为"$((++c))"来实际组合循环内的两条线。在这种情况下,双引号有点偏执,但它们不会造成任何伤害。

根据您的评论,听起来您可能没有使用bash。如果是这种情况,您可以改为使用管道:ls -rt | while read -r file; do