在Perl中排除特定目录

时间:2019-04-17 10:36:03

标签: regex perl

我想编写代码以读取目录中除特定目录外的所有文件。

目录路径:

constellation/netcool/aws_netcool_db2/trunk/src

src下,有3个目录(basev1_versionv2_versionv3_version)。我想读取除base目录以外的所有目录。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用find

quotemeta() { printf '%s' "$1" | perl -0777ne'print quotemeta($_)'; }

path=constellation/netcool/aws_netcool_db2/trunk/src

find "$path" \
   -path "$( quotemeta "$path/base" )" \
   -prune \
-o \
   \! -type d \
   -print

请注意,这不适用于以-开头的路径。将./放在这些前缀之前。


使用Perl:

use File::Find::Rule qw( );

my $path = "constellation/netcool/aws_netcool_db2/trunk/src";

my $FFR = File::Find::Rule::;
my @files =
   $FFR->or(
      $FFR
         ->exec(sub{ $_[2] eq "$path/base" })
         ->prune
         ->discard,
      $FFR
         ->not( $FFR->directory ),
   )
      ->in($path);

请注意,这不适用于所有路径(例如.,以/结尾的路径等),因为F :: F :: R会清理路径。如果您希望支持任意路径,则需要将那些未记录的相同清除应用于比较$_[2]的值。