perl - 从命令行重命名多个文件

标签 perl bash rename file-rename

<分区>

Possible Duplicate:
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

我知道您可以使用“重命名”重命名多个文件,但我不知道在这种情况下该怎么做。

最佳答案

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

rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf

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

注意

如果你运行下面的命令(linux)

$ file $(readlink -f $(type -p rename))

你有一个类似的结果

.../rename: Perl script, ASCII text executable

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

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

要使其成为 DebianUbuntu 等衍生产品的默认设置:

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
  • 由于 expression 末尾的 e 修饰符,允许使用后面的 perl 函数

关于perl - 从命令行重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327613/

相关文章:

git - 将提交的 git 文件移动到另一个目录

python - 在正则表达式字符串搜索后查找标记(单词)索引的有效方法

linux - BASH:如何在命令后的同一行中添加文本

java - 使用 makefile 使用 javac 编译时为 "error: cannot find symbol"

linux - 使用linux命令获取特定进程

string - 在PowerShell中重命名许多文件夹

Python 重命名 Pandas DataFrame 列

Java 相当于 Perl 的 s///运算符?

perl - 使用 LWP - Perl 设置下载速度

sql - 使用 perl 和 DBI 将一个非常大的表从一个 DB2 复制到另一个