因此,對於我正在編寫的程序,我想要做的是搜索目錄中的所有子目錄。如果子目錄名包含一個單詞,讓我們說「foo」,那麼程序將打開這個子目錄並對子目錄內的文件執行一個功能。任何人都可以給我一些關於如何去做這件事的幫助嗎?它也需要遞歸。在此先感謝Perl搜索特定的子目錄,然後處理
回答
這可以使用File::Find
模塊完成,但我認爲Path::Class
是優越的,即使它不是核心模塊,並且可能需要安裝。
該程序找到想要的文件並調用process
來處理它們。目前process
子程序只是打印文件的名稱進行測試。
use strict;
use warnings;
use Path::Class;
my $dir = dir '/path/to/root/directory';
$dir->recurse(callback => sub {
my $node = shift;
return if $node->is_dir;
my $parent = $node->parent;
if ($parent->basename =~ /foo/) {
process($node);
}
});
sub process {
my $file = shift;
print $file, "\n";
}
更新
如果你願意的話,這個程序執行使用File::Find
相同的任務。
use strict;
use warnings;
use File::Find;
use File::Basename qw/ basename /;
my $dir = '/path/to/root/directory';
find(sub {
return unless -f;
if (basename($File::Find::dir) =~ /foo/) {
process($File::Find::name);
}
}, $dir);
sub process {
my $file = shift;
print $file, "\n";
}
更新
按照要求,這裏是用Path::Class::Rule
比較的進一步的解決方案。由於daxim建議代碼有點短。
use strict;
use warnings;
use Path::Class::Rule;
my $rule = Path::Class::Rule->new;
$rule->file->and(sub { $_->parent->basename =~ /foo/ });
my $next = $rule->iter('/path/to/root/directory');
while (my $file = $next->()) {
process($file);
}
sub process {
my $file = shift;
print $file, "\n";
}
你能否也請添加一個Path :: Class :: Rule解決方案作爲對比?代碼應該更短,更具說明性。 – daxim
好的,如果我不能安裝任何模塊,我會怎麼做? – user1440061
完美,非常感謝! – user1440061
- 1. 批處理腳本來搜索特定目錄
- 2. Perl的搜索目錄
- 3. PHP - 搜索特定文件的目錄和子目錄?
- 4. 搜索帶有特定目錄及其子目錄路徑的特定文件
- 5. G ++搜索/lib/../lib/,然後/ lib目錄/
- 6. 批處理:每個目錄和子目錄中的搜索目錄
- 7. 如何使用Perl在目錄中搜索特定文件?
- 8. 循環遍歷子目錄,cd到子目錄中,然後處理文件
- 9. 如何在特定目錄中搜索並存檔,然後打開該文件?
- 10. slocate - 如何搜索特定目錄
- 11. 批處理文件來搜索子目錄
- 12. 遞歸展開和搜索特定子目錄的模式
- 13. 使用批處理腳本搜索和排序目錄和子目錄
- 14. 搜索目錄中包含特定文件的目錄?
- 15. 是否可以搜索目錄內的特定目錄?
- 16. 無法處理perl LDAP搜索
- 17. 搜索QStringList的特定項目,然後其他可能包含項目
- 18. 搜索子目錄python
- 19. ASP.Net搜索子目錄
- 20. 問題搜索子目錄
- 21. 遞歸搜索子目錄
- 22. 在LDAP中搜索給定目錄中的子目錄
- 23. R子與Perl - 開始向後搜索?
- 24. 以ACCESS開頭的文件搜索目錄,然後搜索該文件
- 25. 正在搜索特定的SQL表,然後搜索此結果中的行
- 26. 如何從特定目錄和所有子目錄中搜索特定擴展名的文件
- 27. 在perl中搜索特定行後的行
- 28. Python搜索特定條目
- 29. 特定項目搜索
- 30. 哈希登錄,然後用LINQ搜索
File :: Find將執行您需要的遞歸搜索。 – TLP