是否可以使用perl一次删除几个目录,包括其内容? 例如:-我在下面的文件夹中
我可以像rm -rf test *一样删除它们吗? 我在下面尝试过
system(@rm, '-fr', "$path/test*");
但不占用*
答案 0 :(得分:6)
首先,我必须说这是固有的危险,它会递归地从程序中删除目录。
话虽如此,提供这一功能的一个模块是核心popular question
use File::Path qw(remove_tree);
...
remove_tree( @dirs_to_delete, safe => 1 );
这将croak
处理错误,如果递归删除有问题,我认为这是一个很好的主意。但是,如果这不适用于您的设计,则可以使用error
选项,然后由您决定是否检查错误。请参阅File::Path,并查看其他一些有用的选项。
这也将删除文件。因此,例如,在整理要吹走的事物列表时要小心
use File::Glob ':bsd_glob';
my @dirs_to_delete = glob "$path/test*/"; # note the trailing /
在结尾的/
所在的位置,以便仅返回目录。通过Error Handling use语句,我们从glob
中获得了:bsd_glob
,该文件名适用于带有空格的文件名。†
首先更接近要删除的内容可能更安全
my $orig_cwd = Cwd::cwd;
chdir $path or die "Can't \"chdir $path\": $!";
my @dirs_to_delete = glob "test*/";
# chdir $orig_cwd;
(Cwd
除chdir
以外还有其他选项,可返回到原始的cwd
)
当然,这根本不能使它防错。
请原谅多次警告,但发布递归删除操作让我有些紧张。
†或者将(双)引号glob qq{"$path/test*/"}
加倍,或使用File::Glob,\Q
的{{1}}形式,但也可以转义所有非单词字符。