使用正则表达式重命名文件 - Linux

6

我有三个文件,它们的名字是

file1.txt
file2.txt
file3.txt

我正在尝试将它们重命名为

mynewfile-1.txt
mynewfile-2.txt
mynewfile-3.txt

如何使用正则表达式来实现这个功能?

1个回答

6
就像这样:
rename -n 's/^file/mynewfile-/' ./*.txt

或者从评论中:
rename -n 's/^file(\d+)/mynewfile-${1}-test/' ./*.txt
                   ___            ____
                    ^               ^
              capturing group       |
                               captured group

当输出结果看起来良好时,删除-n开关以进行真实重命名。

warning 还有其他具有相同名称的工具,它们可能能够完成此操作,所以要小心。

作为util-linux软件包的一部分的重命名命令将不会执行此操作。

如果运行以下命令(GNU):

$ rename

如果你看到perlexpr,那么这似乎是正确的工具。
如果不是的话,要将其设置为默认(通常已经是这样)在Debian和类似的衍生版本如Ubuntu上:
$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename

对于Arch Linux:

pacman -S perl-rename

对于RedHat系列的发行版:

yum install prename

“prename” 包位于 EPEL 软件仓库中。
对于Gentoo:
emerge dev-perl/rename

对于 *BSD:

pkg install p5-File-Rename

对于Mac用户:
brew install rename

如果您在其他发行版中没有此命令,请搜索您的软件包管理器以安装它或者手动安装

或者您可以使用Perl CPAN:

cpan -i File::Rename

旧的独立版本可以在这里找到这里


人改名


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

如果我想将它们转换为mynewfile1-test.txt,我该怎么做? - Avoxy
rename -n 's/^file(\d+)/mynewfile-${1}-test/' *.txt - Gilles Quénot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接