首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从命令行重命名多个文件

从命令行重命名多个文件
EN

Stack Overflow用户
提问于 2013-01-14 22:05:22
回答 1查看 7.2K关注 0票数 3

可能重复: Renaming lots of files in Linux according to a pattern

我有这种格式的多个文件:

代码语言:javascript
运行
复制
file_1.pdf
file_2.pdf
...
file_100.pdf

我的问题是如何重命名所有文件,如下所示:

代码语言:javascript
运行
复制
file_001.pdf
file_002.pdf
...
file_100.pdf

我知道您可以用“重命名”重命名多个文件,但在本例中我不知道如何进行重命名。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-14 22:07:49

您可以使用Perl工具renameshell提示符执行此操作。(还有其他同名的工具可能或可能无法做到这一点,所以要小心。)

代码语言:javascript
运行
复制
rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf

如果您想进行一次试运行以确保不关闭任何文件,请将-n开关添加到命令中。

备注

如果运行以下命令(linux)

代码语言:javascript
运行
复制
$ file $(readlink -f $(type -p rename))

你的结果就像

代码语言:javascript
运行
复制
.../rename: Perl script, ASCII text executable

那么这似乎是正确的工具=)

这似乎是Ubuntu上的默认Ubuntu命令。

为了使它成为Debian和类似于Ubuntu这样的衍生工具的缺省值:

代码语言:javascript
运行
复制
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
  • 后面的perl函数是由于表达式末尾的e修饰符而得到的。
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14327613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档