Использование 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]
, если вы хотите поддерживать произвольные пути.