我在 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 编写的。