example file Ответов: 1

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


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

/home/rpasa/demo_checklist
`-- DEMO
    |-- top
    |   |-- DV
    |   |   |-- rev1
    |   |   |-- rev2
    |   |   |-- task.config
    |   |   `-- task.html
    |   |-- checklist
    |   |   |-- rev1
    |   |   |-- rev2
    |   |   |-- rev3
    |   |   |-- rev4
    |   |   |-- task.config
    |   |   `-- task.html


Ожидаемый результат:

<pre>/home/rpasa/demo_checklist
`-- DEMO
    |-- top
    |   |-- DV
    |   |   |-- rev1
    |   |   |-- rev2
    |   |-- checklist
    |   |   |-- rev1
    |   |   |-- rev2
    |   |   |-- rev3
    |   |   |-- rev4


Что я уже пробовал:

my @logs = glob "task.*";
for (@logs) {
    next if $_ eq "task.*";
    unlink $_;
}

1 Ответов

Рейтинг:
0

Jochen Arndt

Используйте мое решение вашего вопроса Как удалить подкаталоги из каталога struture с помощью Perl?[^] в качестве отправной точки (непроверенный Правка: проверенные и исправленные ошибки):

sub DelTaskFiles{
    my ($workdir) = shift;
    #print "Processing '$workdir'\n";
    my $mask = $workdir . '/*';
    # glob: Return list of filename expansions for search mask
    my @files = glob $mask;
    foreach $f (@files)
    {
        # Process sub directories
        if (-d $f)
        {
            DelTaskFiles($f);
        }
        else
        {
            my $filename = basename($f);
            if ($filename =~ /^task/)
            {
                #print "Removing $f\n";
                unlink $f;
            }
        }
    }
}

DelTaskFiles('/home/rpasa/demo_checklist');

}
Общее правило:
Если вам нужно обработать подкаталоги, используйте рекурсивную функцию, которая обрабатывает каталоги. В каждом каталоге выполните итерацию по файлам и выполните необходимые действия для сопоставления файлов.