linux - 如何在 bash 中用前导零替换文件名中的数字?

标签 linux bash

关于如何添加带前导零的数字等也有类似的问题,但就我而言,我的文件名有两个数字,即章节数和页数。两者都缺少前导零,因此它们不是按字母顺序排序的。使用 rename 或任何其他我想要转换的文件,如下所示:

file_1_1.mp3  to file_01_01.mp3
file_1_12.mp3 to file_01_12.mp3
file_12_1.mp3 to file_12_01.mp3
...

我尝试过这个:

rename 's/\d+/sprintf("%02d",$&)/e' *.mp3

但它只是在章节号中添加前导零。

最佳答案

像这样:

rename -n 's/(\d+)_(\d+)\./sprintf("%02d_%02d.", $1, $2)/e' *.mp3

当输出看起来不错时删除 -n 开关

输出

rename(file_1_12.mp3, file_01_12.mp3)
rename(file_1_1.mp3,  file_01_01.mp3)
rename(file_12_1.mp3, file_12_01.mp3)

man rename

warning 还有其他同名工具可能能够也可能无法执行此操作,因此请小心。

作为 util-linux 包一部分的重命名命令不会。

如果运行以下命令 (GNU)

$ rename

并且您看到perlexpr,那么这似乎是正确的工具。

如果没有,请将其设为 DebianUbuntu 等衍生版本上的默认设置(通常已经是这种情况):

$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

对于 archlinux:

pacman -S perl-rename

对于 RedHat 系列发行版:

yum install prename

“prename”包位于 EPEL 中存储库。


对于 Gentoo:

emerge dev-perl/rename

对于 *BSD:

pkg install gprename

p5-文件重命名


对于 Mac 用户:

brew install rename

如果您的其他发行版没有此命令,请搜索您的软件包管理器来安装它或 do it manually (没有部门...)


这个工具最初是由 Perl 之父 Larry Wall 编写的。

关于linux - 如何在 bash 中用前导零替换文件名中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62533799/

相关文章:

Linux 运行 snmpcheck.pl -t 10.100.10.254 |较少的

linux - 使用 bash 脚本使用 valgrind 检查内存

linux - Qt中的键盘输入

linux - 使用 grep 从文件夹中的文件中删除确切的字符串

bash - 如何获取通过管道传输到 Bash 中另一个进程的进程的 PID?

带有 --index-filter : strange bash error ( ! 的 git-filter-branch:找不到事件)

linux - 从文件名中存在的日期字符串设置文件修改时间

linux - 如何杀死从 kill 或 kill -9 脚本启动的进程产生的所有子进程

linux - 如何在bash中将每行的第一个字母大写?

linux - 避免在用户空间和内核空间之间复制数据,反之亦然