如果文件权限不是444(unix中的chmod 444),则Perl脚本删除目录中的文件

时间:2013-09-25 01:38:15

标签: perl

如果匹配,我们需要删除特定目录中的某些文件  以下标准

  1. 文件应超过72小时

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

    请帮我解决这个perl脚本

  3. 此致

    维克拉姆

2 个答案:

答案 0 :(得分:1)

为什么在find已有选项的情况下编写Perl脚本来执行此操作?

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

良好的开端将是:

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

虽然我在最后添加-delete之前彻底测试了非常: - )

(从内存开始,因此先测试)使用444以外的权限删除当前目录中的文件,并且在过去三天内未修改。< / p>

答案 1 :(得分: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;

添加检查和错误消息以及适当的地方。并且首先,不要心不在焉地在你的主目录上运行它以确保它有效(就像我刚刚做的那样,稍微改变条件以确保它匹配几个文件):)