注意:相关问题通过使用不推荐使用的模块解决,并且在OS之间不一致。当前问题的答案使用较新的模块,因此将在此处发布。Perl以递归方式复制特定格式的文件
我有一个模块,反过来使用File::NCopy CPAN模块从文件递归复制到。
问题是 - 我需要递归复制特定文件类型的文件到目的地。有什么方法可以通过扩展来过滤源代码?
作为替代 - 有没有办法复制除隐藏文件以外的所有文件?我的主要问题是.git文件夹也被复制 - 这是不希望的。
平台:MacOS的
替代探索:
1)文件::复制::递归模块: - 似乎提供文件或目录的唯一递归复制。似乎无法帮助隐藏文件或排除过滤器
2)使用rsync -avz --exclude =“。*”: - 无法将其与递归复制功能结合使用。
3)与How can I copy a directory recursively and filter filenames in Perl?类似的自主开发的解决方案: - 可能是最后的手段 - 但似乎不移植,除非在不同平台上进行了调整和测试。 除非模块已经存在,否则会回落到此。
4)https://metacpan.org/pod/Path::Class::Dir: - 似乎似乎 - 将运行一个快速实施使用此。
实施的解决方案:
我用递归模块和路径::类::迪尔
dir($sourceDir)->recurse(callback => sub {
my $file = shift;
return if($file eq '.' || $file eq '..');
return if -d $file;
if (<custom filter>)
{
my $path = file($file)->relative($sourceDir);
fcopy("$sourceDir/$path", "$destinationDir/$path") or die "Could not perform fcopy: $!";
}
});
没有相对路径 - 目标文件夹结构似乎并不相同作为源文件夹结构。
小记:['文件:: NCopy'(https://metacpan.org/pod/File::NCopy)报告说,它已被弃用,建议使用['文件::复制:: Recursive']( https://metacpan.org/pod/File::Copy::Recursive)。 – Miller
什么操作系统? – ooga
如果您想排除点文件AFAIK,则可能必须制作本地解决方案。 – squiguy