-3
A
回答
1
更简单的方法是'不适用于perl'。
find /files/axis -mtime +30 -type f -exec rm {} \;
2
这会照你的要求去做。它使用opendir
/readdir
来列出目录。 stat
获取所有必要的信息,以及随后的-f _
和-M _
调用检查项目是否为文件且大于30天而不重复stat
调用。
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>;
}
}
0
对于跨平台兼容的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;
相关问题
- 1. Unix命令删除目录中的所有文件,但保留目录
- 2. 删除所有文件,但不目录
- 3. 目标c:如何只删除一个目录下的所有文件,但保留目录本身
- 4. 删除目录中的所有文件
- 5. 删除目录结构,但保留目录内容
- 6. 脚本删除目录,但保留的文件
- 7. 删除目录及所有文件中
- 8. 删除目录和所有子目录中的特定文件
- 9. 删除所有文件和文件夹,但排除目录
- 10. Windows批处理文件,从目录中删除文件,但保留每个目录中的最新文件
- 11. 删除所有文件,但将所有目录保存在bash脚本中?
- 12. 从URL中删除目录,同时保留当前目录下的文件
- 13. 空目录(删除所有文件)
- 14. 脚本蝙蝠删除所有文件和目录中的所有目录c:\
- 15. 保留已删除项目的记录
- 16. 保持目录和所有子目录递归除了文件
- 17. Ant删除子目录中的子目录和文件,但不删除目录本身的任何文件
- 18. PHPunit如何排除目录中的所有文件但不排除子目录
- 19. PHP删除的目录都是空的所有文件和所有子目录
- 20. 将所有未记录的文件删除到Git目录中?
- 21. 删除所有子目录和子文件而不删除父/根目录?
- 22. 删除所有macosx目录中的所有svn文件
- 23. 如何删除所有目录中的所有文件?
- 24. 删除所有保持文件不变的目录(Windows cmd)
- 25. Bash:scp目录中的所有文件,但不是子目录
- 26. 从目录中递归删除文件,但保持目录结构完好
- 27. 从svn中删除目录,但保留在本地
- 28. Bash。删除所有文件和目录,但某些
- 29. 删除除一个目录以外的所有文件和目录
- 30. 的.htaccess文件 - 删除所有尾随斜线除目录和子目录
查看现有职位:http://stackoverflow.com/questions/25090951/perl-delete-all-files-在目录和这个要点:https://gist.github.com/johnhaitas/1507529 – 2014-10-18 08:45:25
写了一个解决方案,我'我认为你可能想要检查*中的所有文件并且在给定的目录下。是对的吗? – Borodin 2014-10-18 14:07:28