如何使用Perl删除目录及其内容?

时间:2019-05-27 01:45:06

标签: perl

是否可以使用perl一次删除几个目录,包括其内容? 例如:-我在下面的文件夹中

  • test1
  • test2
  • test3
  • test4

我可以像rm -rf test *一样删除它们吗? 我在下面尝试过

system(@rm, '-fr', "$path/test*");

但不占用*

1 个答案:

答案 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;

Cwdchdir以外还有其他选项,可返回到原始的cwd
当然,这根本不能使它防错。

请原谅多次警告,但发布递归删除操作让我有些紧张。


或者将(双)引号glob qq{"$path/test*/"}加倍,或使用File::Glob\Q的{​​{1}}形式,但也可以转义所有非单词字符。