:디렉토리의 모든 파일을 삭제하지만 디렉토리는 유지 하시겠습니까? 가장 쉬운 방법에 무엇
- 가 주어진 디렉토리/파일/축에있는 모든 파일을 삭제가 (
unlink
) - 이 30 일 밖에
- 보다 오래된 파일이 빈 디렉토리가 남아 있어야한다 (하지
rmdir
을)
:디렉토리의 모든 파일을 삭제하지만 디렉토리는 유지 하시겠습니까? 가장 쉬운 방법에 무엇
unlink
)rmdir
을)쉬운 방법은 'not perl'입니다.
find /files/axis -mtime +30 -type f -exec rm {} \;
이렇게하면됩니다. 디렉토리를 나열하는 데 opendir
/readdir
을 사용합니다. stat
은 필요한 모든 정보를 가져온 후 -f _
및 -M _
호출은 항목이 파일이고 stat
호출을 반복하지 않고 30 일 이상 경과했는지 확인합니다.
당신은 내가 생각하기 시작으로, 파일을 어디서나 아래에 주어진 디렉토리를 삭제하려면
use strict;
use warnings;
use 5.010;
use autodie;
no autodie 'unlink';
use File::Spec::Functions 'catfile';
use constant ROOT => '/path/to/root/directory';
STDOUT->autoflush;
opendir my ($dh), ROOT;
while (readdir $dh) {
my $fullname = catfile(ROOT, $_);
stat $fullname;
if (-f _ and -M _ > 30) {
unlink $fullname or warn qq<Unable to delete "$fullname": $!\n>;
}
}
는, 당신은
File::Find
이 필요합니다. 전반적인 구조는 원래 코드와 크게 다르지 않습니다.
use strict;
use warnings;
use 5.010;
use autodie;
no autodie 'unlink';
use File::Spec::Functions qw/ canonpath catfile /;
use File::Find;
use constant ROOT => 'E:\Perl\source';
STDOUT->autoflush;
find(\&wanted, ROOT);
sub wanted {
my $fullname = canonpath($File::Find::name);
stat $fullname;
if (-f _ and -M _ < 3) {
unlink $fullname or warn qq<Unable to delete "$fullname": $!\n>;
}
}
크로스 플랫폼 호환 Perl 솔루션의 경우 다음 두 모듈 중 하나를 권장합니다.
#!/usr/bin/env perl
use strict;
use warnings;
use Path::Class;
my $dir = dir('/Users/miller/devel');
for my $child ($dir->children) {
next if $child->is_dir || (time - $child->stat->mtime) < 60 * 60 * 24 * 30;
# unlink $child or die "Can't unlink $child: $!"
print $child, "\n";
}
#!/usr/bin/env perl
use strict;
use warnings;
use Path::Iterator::Rule;
my $dir = '/foo/bar';
my @matches = Path::Iterator::Rule->new
->file
->mtime('<' . (time - 60 * 60 * 24 * 30))
->max_depth(1)
->all($dir);
print "$_\n" for @matches;
참조 기존 게시물 : http://stackoverflow.com/questions/25090951/perl-delete-all-files- in-a-directory 및이 요지 : https://gist.github.com/johnhaitas/1507529 –
해결책을 작성한 후, * 및 주어진 디렉토리 아래에있는 모든 파일을 검사하려고 할 수도 있습니다. 그게 맞습니까? – Borodin