可能重复: Renaming lots of files in Linux according to a pattern
我有这种格式的多个文件:
file_1.pdf
file_2.pdf
...
file_100.pdf
我的问题是如何重命名所有文件,如下所示:
file_001.pdf
file_002.pdf
...
file_100.pdf
我知道您可以用“重命名”重命名多个文件,但在本例中我不知道如何进行重命名。
发布于 2013-01-14 22:07:49
您可以使用Perl工具rename
从shell
提示符执行此操作。(还有其他同名的工具可能或可能无法做到这一点,所以要小心。)
rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf
如果您想进行一次试运行以确保不关闭任何文件,请将-n
开关添加到命令中。
备注
如果运行以下命令(linux
)
$ file $(readlink -f $(type -p rename))
你的结果就像
.../rename: Perl script, ASCII text executable
那么这似乎是正确的工具=)
这似乎是Ubuntu
上的默认Ubuntu
命令。
为了使它成为Debian
和类似于Ubuntu
这样的衍生工具的缺省值:
sudo update-alternatives --set rename /path/to/rename
解释
s///
是基替换表达式:s/to_replace/replaced/
,请检查perldoc perlre
(\d+)
捕获至少有一个整数:\d
或更多:$1
中的+
sprintf("%03d", $1)
sprintf
类似于printf
,但不用于打印,而是用相同的语法格式化字符串。%03d
用于零填充,而$1
是捕获的字符串。检查perldoc -f sprintf
e
修饰符而得到的。https://stackoverflow.com/questions/14327613
复制相似问题