可能重复:
根据模式在 Linux 中重命名大量文件
我有多个这种格式的文件:
file_1.pdf
file_2.pdf
...
file_100.pdf
我的问题是如何重命名所有文件,如下所示:
file_001.pdf
file_002.pdf
...
file_100.pdf
我知道您可以使用“重命名”重命名多个文件,但在这种情况下我不知道该怎么做。
可能重复:
根据模式在 Linux 中重命名大量文件
我有多个这种格式的文件:
file_1.pdf
file_2.pdf
...
file_100.pdf
我的问题是如何重命名所有文件,如下所示:
file_001.pdf
file_002.pdf
...
file_100.pdf
我知道您可以使用“重命名”重命名多个文件,但在这种情况下我不知道该怎么做。
您可以rename在shell提示符下使用 Perl 工具执行此操作。(还有其他同名的工具可能会也可能不会这样做,所以要小心。)
rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf
如果您想进行试运行以确保不会破坏任何文件,请将-n开关添加到命令中。
如果您运行以下命令 ( linux)
$ file $(readlink -f $(type -p rename))
你有一个像
.../rename: Perl script, ASCII text executable
那么这似乎是正确的工具=)
这似乎rename是Ubuntu.
使其成为默认值Debian和派生值,例如Ubuntu:
sudo update-alternatives --set rename /path/to/rename
s///是基本替换表达式:s/to_replace/replaced/,检查perldoc perlre(\d+)()用至少一个整数捕获:\d或更多:+in$1sprintf("%03d", $1) sprintf类似printf,但不用于打印,而是用相同的语法格式化字符串。%03d用于零填充,并且$1是捕获的字符串。查看perldoc -f sprintfe如果你想用纯 bash 来做:
对于文件中的 f_*.pdf;做 x="${f##*_}"; echo mv "$f" "${f%_*}$(printf '_%03d.pdf' "${x%.pdf}")"; 完毕
(注意调试回声)