我想编写代码以读取目录中除特定目录外的所有文件。
目录路径:
constellation/netcool/aws_netcool_db2/trunk/src
在src
下,有3个目录(base
,v1_version
,v2_version
,v3_version
)。我想读取除base
目录以外的所有目录。
我该如何解决这个问题?
答案 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]
的值。