我正在学习如何使用命令行 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/" *