当前位置:  开发笔记 > 编程语言 > 正文

如何在Bash文件名中填充数字?

如何解决《如何在Bash文件名中填充数字?》经验,为你挑选了4个好方法。



1> KARASZI Istv..:

它不是纯粹的bash,但使用rename命令更容易:

rename 's/\d+/sprintf("%05d",$&)/e' foo*



2> Chris Conway..:

如果N不是先验固定:

 for f in foo[0-9]*; do mv $f `printf foo%05d ${f#foo}`; done



3> Michael Balt..:

我有一个更复杂的案例,文件名有一个后缀和一个前缀.我还需要对文件名中的数字进行减法.

例如,我想foo56.png成为foo00000055.png.

我希望如果你做的事更复杂,这会有所帮助.

#!/bin/bash

prefix="foo"
postfix=".png"
targetDir="../newframes"
paddingLength=8

for file in ${prefix}[0-9]*${postfix}; do
  # strip the prefix off the file name
  postfile=${file#$prefix}
  # strip the postfix off the file name
  number=${postfile%$postfix}
  # subtract 1 from the resulting number
  i=$((number-1))
  # copy to a new name with padded zeros in a new folder
  cp ${file} "$targetDir"/$(printf $prefix%0${paddingLength}d$postfix $i)
done



4> Pioz..:

我使用的oneline命令是这样的:

ls * | cat -n | while read i f; do mv "$f" `printf "PATTERN" "$i"`; done

PATTERN可以是例如:

使用增量计数器重命名:( %04d.${f#*.}保留原始文件扩展名)

使用带前缀的增量计数器重命名:( photo_%04d.${f#*.}保留原始扩展名)

使用增量计数器重命名并将扩展名更改为jpg: %04d.jpg

使用带有前缀和文件basename的增量计数器重命名: photo_$(basename $f .${f#*.})_%04d.${f#*.}

...

例如,您可以过滤要重命名的文件 ls *.jpg | ...

您可以使用作为f文件名的变量,i即计数器.

对于您的问题,正确的命令是:

ls * | cat -n | while read i f; do mv "$f" `printf "foo%d05" "$i"`; done

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有