注意:相關問題通過使用不推薦使用的模塊解決,並且在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