【问题标题】:Perl: List files and directories recursively but exclude some directories and files that passedPerl:递归列出文件和目录,但排除一些通过的目录和文件
【发布时间】:2016-12-21 16:01:28
【问题描述】:

请提供任何建议或 sn-p 或任何可能有用的东西。

我已经尝试过想要的功能,但是如何在递归时排除某些目录?

【问题讨论】:

  • 如果您已经尝试过代码,请编辑您的问题并将其粘贴进去。这样我们可以看到您已经做出了努力,并指导您找到解决方案(而不是为您完整地编写代码)。
  • Look into this 和请包括一些东西来表明努力,你不能只要求我们在这里写代码。

标签: perl perlscript


【解决方案1】:

在 Linux 中,您可以使用 Linux 的“find”和“grep”命令并在 Perl 中运行这些 Linux 命令,使用 qx 将 Linux 命令结果存储在 Perl 中。

例如

$cmd = "find . | grep -v 'dir1\|dir2\|...\|dirn'";
$result=qx($cmd);

上述命令组合执行以下操作:

  1. find 命令将列出所有目录和 递归文件。
  2. 管道“|”将查找结果传递给 grep 命令
  3. grep -v 命令将在屏幕上仅打印不存在的字符串 在“dir1”、“dir2”...“dirn”中被忽略
  4. 最后qx命令会执行find和grep Linux 命令并将输出存储到 $result 变量。

您可以在 Windows 中执行类似的操作。唯一的区别是使用 Windows 命令行。

例如

$result=qx('dir /b/s | find /v "workspace" | find /v "TVM"')

上述命令将递归列出所有目录,除了目录名称为“workspace”或“TVM”。

【讨论】:

  • csay,欢迎来到 SO!我们非常感谢您努力提供帮助,因为这是本网站的全部目的。您的代码可以工作(据我所知),但 OP 要求提供 Perl 解决方案。 (实际上他要求我们为他编写代码,这在这里不太受欢迎。)您的帖子写得很好,格式正确并解释了您的解决方案。我喜欢这样——我希望 OP 也有同样的态度!
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2021-01-05
  • 1970-01-01
  • 2018-07-13
  • 2016-07-30
  • 2013-07-31
相关资源
最近更新 更多