use File::Find;
find(sub { -f && /\.tmp$/ && unlink }, '.')
用于删除* .tmp文件的Perl脚本。我的问题是让它搜索多个扩展名,例如* .tmp OR * .tmp2。我尝试过一些变种,比如
find (sub { -f && /\.tmp$,.tmp2$/ && unlink }, '.')
但我似乎无法解决我确定的简单语法问题。
答案 0 :(得分:2)
这并非真正针对File::Find
。您只是使用普通的正则表达式匹配,因此您需要一个匹配多个扩展名的正则表达式,例如。
/\.tmp2?$/
?
表示其前面的表达式(本例中为2
)是可选的。在更一般的情况下,您可以写:
/\.(ext1|ext2|ext3)$/
匹配3个不同的扩展程序。
答案 1 :(得分:1)
正则表达式(此处:/\.tmp$/
或/\.tmp$,.tmp2$/
)是他们自己的语言 - 请阅读Perl Regular Expressions Tutorial以获取介绍。要指定替代模式,我们不使用逗号(它在Perl正则表达式中没有特殊含义),而是管道:|
/\.tmp$|\.tmp2$/
表示“字符串末尾的文字字符串.tmp
或字符串末尾的文字字符串.tmp2
”。我们可以将其简化为
/[.]tmp[2]?$/
表示“字符串.tmp
,可选地后跟2
,位于字符串的末尾”。
答案 2 :(得分:0)
您可以尝试使用正则表达式。在此示例中,我添加了\d*
以匹配tmp
字符串后的可选数字。
作为一个单行:
perl -MFile::Find -e 'find(sub { -f && m/\.tmp\d*$/ && unlink }, q|.|)'