2009-12-01 2 views
1

Как я могу найти все файлы, соответствующие определенным критериям (, возраст изменения в днях) в списке каталогов, но не в их подкаталогах?Как я могу получить все файлы в каталоге, но не в подкаталогах, в Perl?

Я хотел использовать File :: Find, но, похоже, он всегда идет и в подкаталоги.

+0

Что такое «определенные критерии»? Размер, разрешения, имена, даты, что-нибудь? – innaM

+0

@Manni: -M, возраст модификации в днях –

ответ

8
@files = grep { -f && (-M) < 5 } <$_/*> for @folders; 
+7

при выполнении нескольких -X в одном файле, вы можете использовать _ как «имя файла» на всех, кроме первого, чтобы повторно использовать один и тот же возврат stat – ysth

2

Использовать readdir или File::Slurp::read_dir совместно с grep.

#!/usr/bin/perl 

use strict; 
use warnings; 

use File::Slurp; 
use File::Spec::Functions qw(canonpath catfile); 

my @dirs = (@ENV{qw(HOME TEMP)}); 

for my $dir (@dirs) { 
    print "'$dir'\n"; 
    my @files = grep { 2 > -M and -f } 
       map { canonpath(catfile $dir, $_) } read_dir $dir; 
    print "$_\n" for @files; 
} 
-1

Вы можете установить File :: Find :: чернослив в 'хотел' функция для пропуска дерева каталогов. Добавьте что-то вроде $ File :: Find :: prune = 1 if (-d & & $ Файл :: Find :: name ne ".");

+5

Если вы не хотите сделайте глубину первого поиска, не используйте инструмент поиска первой глубины. :) –

Смежные вопросы