我想在内容混合的目录中为所有没有后缀的文件添加后缀。
- 我只想获取没有后缀的文件
- 然后我想给它们添加一个后缀(比如,说,
.txt
或.html
)
这是我遇到麻烦的第一部分。
我glob
用来获取所有文件。这是代码摘录:
my @files = grep ( -f, <*> );
-f
确保只添加文件,*
通配符允许所有名称。
但是我如何重写它以只获取没有后缀的文件?或者至少,我如何清洗后缀文件的数组?
您可以添加另一个 grep 语句:
my @files = grep !/\.\w{1,4}$/, grep -f, <*>;
# -------------------
或者,正如 Borodin 指出的那样,您可以一次性完成:
my @files = grep !/\.\w{1,4}$/ && -f, <*>;
您可以根据您拥有的后缀类型更改正则表达式以更好地适应。正则表达式查找与句点不匹配的文件,其后跟 1 到 4 个字母数字字符,位于字符串的末尾。我选择了一个相当松散的正则表达式来匹配大量可能的后缀。
没有后缀的文件就是名称中没有点的文件。
my @files = grep { -f and not /\./ } <*>;
使用grep
,您只需要添加一个正则表达式:
my @files = grep { !/\.\w+\z/ && -f } ( <*> );