0

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

  1. 我只想获取没有后缀的文件
  2. 然后我想给它们添加一个后缀(比如,说,.txt.html

这是我遇到麻烦的第一部分。

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

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

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

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

4

3 回答 3

2

您可以添加另一个 grep 语句:

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

或者,正如 Borodin 指出的那样,您可以一次性完成:

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

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

于 2012-12-22T16:06:20.400 回答
2

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

my @files = grep { -f and not /\./ } <*>;
于 2012-12-22T16:46:51.760 回答
1

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

my @files = grep { !/\.\w+\z/ && -f } ( <*> );
于 2012-12-22T16:07:40.633 回答