-2

如果符合以下条件,我们需要删除特定目录中的一些文件

  1. 文件应超过 72 小时

  2. 如果文件权限在 unix 中是只读的 chmod 444 ,那么您不应该删除该文件。其他文件权限如果超过 72 小时,我们必须从目录中删除该文件。

    请帮我处理这个 perl 脚本

问候

维克拉姆

4

2 回答 2

1

find既然已经有了选项,为什么还要编写 Perl 脚本来执行此操作?

您可以使用find-perm选项-mtime来选择符合您条件的文件。-maxdepth 0如果您不想进入子目录,您可能还想使用。

一个好的开始应该是这样的:

find . -maxdepth 0 ! -perm 0444 ! -mtime 2 -delete

尽管在最后添加之前我会对其进行非常-delete彻底的测试:-)

应该(从内存中,所以首先测试它)删除当前目录中的文件,其权限不是444过去三天内未修改的文件。

于 2013-09-25T01:42:34.193 回答
0

我同意使用 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;

酌情添加检查和错误消息等。最重要的是,不要心不在焉地在你的主目录上运行它以确保它工作(就像我刚刚所做的那样,在稍微改变条件以确保它匹配几个文件之后):)

于 2013-09-25T16:09:47.880 回答