如何在Windows路径下找到所有lib目录?

时间:2009-12-01 05:53:09

标签: perl

运行脚本时,我收到“找不到文件”的结果:

use File::Basename; 

my @dirs = grep { fileparse($_) =~ /^[L|l]ib/ } 

split /\n/, dir e:\\/ad/b/s; 

print @dirs; 

这是我的实际代码。我正在尝试grep整个驱动器中名为 lib Lib 的目录和子目录。

2 个答案:

答案 0 :(得分:3)

如果您使用的是my answer to your previous question中的代码,我唯一能想到的是您的路径上可能有一些外部dir.exe无法理解{{1}的命令行选项}内置cmd.exe。例如,在我的路径中使用Cygwin的目录,我得到了

dir: cannot access /ad/b/s: No such file or directory

也应该养成如果你想让人们能够显示 完全 输出的习惯可以更有效地帮助您。

为确保不会发生这种情况,请使用:

dir

注意反引号```。另请注意对正在使用的模式的更正。

答案 1 :(得分:2)

任何事情。

  • 我希望您使用的是在帖子中丢失的反引号:
  • 但如果您使用反引号,则不需要split,因为它会以列表的形式返回。
  • 我认为[L|l]意味着你的意思。如果您只是表示大写“L”或小写“l”,则不需要替换符号。正确的表达式是[Ll](或(?i:l)ib,这意味着我们将该组的i-flag本地化。)

所以如果它看起来像这样:

 use File::Basename; 

 my @dirs = grep { fileparse($_) =~ /^[Ll]ib/ } qx{dir /AD /B /S e:\\};

这应该有用,如果有任何匹配的话。只需确保使用qx运算符或反引号。