Ваш код построен так, что позволяет обрабатывать только файлы старше 90 дней, а не каталоги :
-
file()
правило File::Find::Rule
соответствует только файлам и исключает каталоги: вам нужно удалить это правило - Встроенная в Perl функция
unlink
может удалять только файлы, но не каталоги;чтобы удалить каталоги, вы можете, например, использовать метод remove_tree
из модуля кода File::Path
.
Также можно добавить правило mtime
кFile::Find::Rule
поиск, чтобы отфильтровать файлы (и каталоги) по дате изменения заранее, а не впоследствии в цикле for
.mtime
ожидает отметку времени эпохи (см. perldoc stat ).
В приведенном ниже коде используется File::Find::Rule
для поиска всех файлов / каталогов в текущем каталоге, которые не были изменены с 90 дней (только один уровень глубоко).Затем он обходит возвращенные пути и применяет правильный метод удаления в соответствии с типом пути (файл или каталог).Он также включает защиту, которая предотвращает удаление текущего каталога, даже если он не изменялся с 90 дней.
use warnings;
use strict;
use File::Find::Rule;
use File::Path qw/remove_tree/;
my $dir = ".";
my $mtime = time - 90 * 60 * 60 * 24;
my @things = File::Find::Rule->maxdepth(1)->mtime( "<= $mtime" )->in($dir);
for my $thing (@things) {
next if $thing eq $dir;
if ( -f $thing) {
unlink $thing or warn "could not delete file $thing : $!";
} else {
remove_tree($thing);
}
}