命令行实用程序“rename”中的多个表达式

命令行实用程序“rename”中的多个表达式

我正在学习如何使用命令行 Unix 实用程序rename(例如,https://www.tecmint.com/rename-multiple-files-in-linux/)。

手册rename说你可以组合多个重命名规则(请注意,这是一个用法的概要,为了清楚起见,我删除了其他参数):

rename [ -e|-E perlexpr]*|perlexpr [ files ]

我尝试在以下算例中执行此操作。我有一个包含文件的目录:

$ ls
01.php  02.php  03.php

我使用一次调用应用了两个转换rename

rename -n -v -e "s/\.php$/\.htm/" "y/a-z/A-Z/" *

预期的行为是我将具有:

$ ls
01.HTM  02.HTM  03.HTM

然而,输出rename

rename(01.php, 01.htm)
rename(02.php, 02.htm)
rename(03.php, 03.htm)

也就是说,不应用第二次转换(小写字母到大写字母)。

如何将多个表达式组合在一起?

答案1

要组合多个表达式,请用分号(Perl 中的指令分隔符)分隔表达式:

rename -n -v -e "s/\.php$/\.htm/; y/a-z/A-Z/" *

根据@AFH 的评论提供的其他变体

另一种方法(无需使用-e,只需将所有表达式与结合起来;):

rename -n -v "s/\.php$/\.htm/; y/a-z/A-Z/" *

还有另一种方法(在每个表达式前面加上-e;注意;第一个表达式的末尾):

rename -n -v -e "s/\.php$/\.htm/;" -e "y/a-z/A-Z/" *

还有一种方法(在每个表达式前面加上-E,隐式添加;):

rename -n -v -E "s/\.php$/\.htm/" -E "y/a-z/A-Z/" *

相关内容