使用perl可以一次删除几个目录,包括它们的内容。例如:-我有以下文件夹
我可以像rm -rf test *一样删除它们吗?我在下面尝试过
system(@rm, '-fr', "$path/test*");
Run Code Online (Sandbox Code Playgroud)
但它没有 *
我必须首先说这是固有的危险,从程序中递归地删除目录。
话虽如此,提供此功能的一个模块是核心File :: Path
use File::Path qw(remove_tree);
...
remove_tree( @dirs_to_delete, safe => 1 );
Run Code Online (Sandbox Code Playgroud)
这将croak针对错误,如果递归删除有问题,我认为这是一个很好的主意。但是,如果这不适用于您的设计,则可以使用该error选项,然后由您决定是否检查错误。请参阅错误处理,以及其他一些有用的选项。
这也将删除文件。因此,例如,在编写要吹走的事物列表时要小心
use File::Glob ':bsd_glob';
my @dirs_to_delete = glob "$path/test*/"; # note the trailing /
Run Code Online (Sandbox Code Playgroud)
尾随位置/使得仅返回目录。随着文件::水珠使用的语句,我们得到了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;
Run Code Online (Sandbox Code Playgroud)
(除了-ing和返回原始选项以外Cwd,还有其他选项)
当然,这(完全)不能使其具有防错能力。chdircwd
请原谅多次警告,但发布递归删除操作会让我有些紧张。
† 或双的(双)引号,glob qq{"$path/test*/"}或使用\Q的形式quotemeta,glob "\Q$path/test/*/"但也逃脱所有非单词字符。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |