如何使用Perl列出所有没有后缀的文件?

时间:2012-12-22 16:00:53

标签: perl file-io

我想在具有混合内容的目录中为所有没有后缀的文件添加后缀。

  1. 我只想获取没有后缀的文件
  2. 然后我想为他们添加一个后缀(例如,.txt.html
  3. 这是我遇到麻烦的第一部分。

    我正在使用glob来获取所有文件。这是代码摘录:

     my @files = grep ( -f, <*> );
    

    -f确保只添加文件,*通配符允许所有名称。

    但是如何重写它只能获取没有后缀的文件?或者至少,我如何清洗后缀文件数组?

3 个答案:

答案 0 :(得分:2)

你可以用另一个grep声明:

my @files = grep !/\.\w{1,4}$/, grep -f, <*>;
#           -------------------

或者你可以像鲍罗丁所指出的那样,在一个方面做到:

my @files = grep !/\.\w{1,4}$/ && -f, <*>;

您可以根据所拥有的后缀类型更改正则表达式以更好地适应。正则表达式在字符串的末尾查找与句点不匹配的文件,后跟1到4个字母数字字符。我选择了一个相当宽松的正则表达式来匹配多个可能的后缀。

答案 1 :(得分:2)

没有后缀的文件是名称中没有点的文件。

my @files = grep { -f and not /\./ } <*>;

答案 2 :(得分:1)

使用grep,您只需添加正则表达式:

my @files = grep { !/\.\w+\z/ && -f } ( <*> );