批量重命名具有模式 sql_^d^_migration.sql 的文件

批量重命名具有模式 sql_^d^_migration.sql 的文件

我在 Ubuntu 系统上有以下文件列表:

sql_1_migration.sql 
sql_2_migration.sql
sql_3_migration.sql
...
sql_100_migration.sql 
sql_1000_migration.sql
...

我需要将其重命名为:

sql_0001_migration.sql 
sql_0002_migration.sql
sql_0003_migration.sql
...
sql_0100_migration.sql 
sql_1000_migration.sql
...

你知道我如何在 bash 中做到这一点吗?正如您所看到的,我想0在包含非 4 位数字的文件前面添加。我需要在 Ubuntu GNU/Linux 操作系统中执行此操作。

答案1

像这样 :

rename -n 's/^sql_(\d+)/sprintf "sql_%.04d", $1/e' sql_*_migration.sql

-n当输出看起来不错时拆下开关。

男人重命名

警告 还有其他同名的工具可能能够也可能无法做到这一点,所以要小心。

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

如果运行以下命令 ( GNU)

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

并且您得到的结果包含Perl script, ASCII text executable且不包含ELF,那么这似乎是正确的工具 =)

如果不是,则将其设为默认值(通常已经是这种情况)Debian并衍生如下Ubuntu

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

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


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

相关内容