如何在目录中用零填充大量文件名?

如何在目录中用零填充大量文件名?

我刚刚编写了一个脚本,该脚本生成了数百个文件并将它们存储在一个目录中~/foo。这些文件的~/foo/X-file范围是XX=1X=900。我的问题是我想按数字顺序查看这些文件,但这些文件没有用零填充。因此该目录包含17-file544-file例如。有没有办法用前导零填充这些文件?

答案1

cd ~/foo
for i in *-file; do
    num=${i%-file}
    padnum=$(printf '%03d' $num)
    mv -v "$i" "${padnum}-file"
done

沿着这些思路做的事情应该可以做到。根据需要进行修改以获得精确的模式和目录。

答案2

如果您有 Perlrename实用程序(通常称为prename,而不是更原始的 Linux 实用程序):

rename -v 's/^([0-9]-)/00$1/; s/^([0-9]{2}-)/0$1/' *-file
  • 第一个正则表达式用两个零替换单个数字 (2->002)
  • 第二个用一个零替换两位数字 (33->033)

答案3

如果在您关心的目录中运行,以下内容应该在 bash 中工作。

for x in [0-9]*-file ; do mv $x `printf %03d-%s ${x%-*} ${x##*-}` ; done

相关内容