我有一些扩展名相同的文件:
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
答案 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
。