如果符合以下条件,我们需要删除特定目录中的一些文件
文件应超过 72 小时
如果文件权限在 unix 中是只读的 chmod 444 ,那么您不应该删除该文件。其他文件权限如果超过 72 小时,我们必须从目录中删除该文件。
请帮我处理这个 perl 脚本
问候
维克拉姆
如果符合以下条件,我们需要删除特定目录中的一些文件
文件应超过 72 小时
如果文件权限在 unix 中是只读的 chmod 444 ,那么您不应该删除该文件。其他文件权限如果超过 72 小时,我们必须从目录中删除该文件。
请帮我处理这个 perl 脚本
问候
维克拉姆
find
既然已经有了选项,为什么还要编写 Perl 脚本来执行此操作?
您可以使用find
和-perm
选项-mtime
来选择符合您条件的文件。-maxdepth 0
如果您不想进入子目录,您可能还想使用。
一个好的开始应该是这样的:
find . -maxdepth 0 ! -perm 0444 ! -mtime 2 -delete
尽管在最后添加之前我会对其进行非常-delete
彻底的测试:-)
那应该(从内存中,所以首先测试它)删除当前目录中的文件,其权限不是444
过去三天内未修改的文件。
我同意使用 find(1) 会更快。
但是,如果您想在 perl 中执行此操作,这里有一个示例脚本,它将构建要删除的文件列表,然后一次性将它们全部删除。
use strict;
my $dir = '/some/directory';
opendir DIR, $dir;
my @list =
map { "$dir/$_" }
grep { -f "$dir/$_" && -M _ > 3 && ((stat _)[2] & 0777) == 0444 }
readdir DIR;
closedir DIR;
unlink @list;
酌情添加检查和错误消息等。最重要的是,不要心不在焉地在你的主目录上运行它以确保它工作(就像我刚刚所做的那样,在稍微改变条件以确保它匹配几个文件之后):)