如何使用Perl递归删除所有的.svn目录?

4

如果有一个目录,想要递归删除该目录下的所有.svn文件夹,那么Perl脚本应该长什么样子?

(无需使用shell且跨平台)


这明显是一个已经解决的问题。惊讶Sinan没有亲自攻击你。 - PP.
1个回答

14

你应该(而且可能应该)首先使用svn export

否则,可以使用File::FindFile::Path::rmtree

#!/usr/bin/perl

use strict; use warnings;

use File::Find;
use File::Path qw( rmtree );
use File::Spec::Functions qw( catfile );

find(\&rm_dot_svn, $_) for @ARGV;

sub rm_dot_svn {
    return unless -d $File::Find::name;
    return if /^\.svn\z/;
    rmtree(catfile $File::Find::name, '.svn');
    return;
}

Path::Class 是否随标准安装一起提供? - PP.
1
不行。但是你可以使用 File::Spec 替代。 - Sinan Ünür
1
太好了!谢谢。由于某些原因,我不得不将remove_tree替换为rmtree(),但之后它运行得很好。 - Lucas Meijer
1
文档中说:“rmtree()函数提供了使用不同参数解释的remove_tree()的传统接口。”我不确定这是什么意思。我更新了发布的解决方案以使用rmtree。此外,现在脚本将在命令行未指定或指定多个顶级目录时执行正确操作。 - Sinan Ünür
@PP 你知道不停地发布贬低我的评论非常令人讨厌。我在此声明,我没有对你的回答(现已删除)进行投票否决。我指出做那么多工作是不必要的。你对我的回答进行报复性的否决很有趣,但也完全没有必要。 - Sinan Ünür

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接