了解find2perl结果

时间:2017-04-26 17:23:08

标签: perl find

我一直在编写一个脚本,它将递归搜索文件系统并删除任何超过20天的文件(没有目录)。我使用了find2perl命令(File::Find的一部分),这就是结果。 (我注意到它并不理解-delete选项,因此我不得不使用旧的-exec...选项。)

(部分脚本被截断)

sub delete_old_files {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);

    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
    -f _ &&
    (int(-M _) > 20) &&
    unlink($_);
}

我理解lstat部分,-f文件检查和unlink,但我不确定(int(-M _) > 20)的工作原理。显然它是在20天内检查修改日期,但我以前从未见过这种语法,并且很想知道它来自何处以及它是如何工作的。我还很好奇它如何将迭代器作为简单的下划线引用而不使用$_-f以及时间检查件。

2 个答案:

答案 0 :(得分:5)

缓存lstat调用的结果。通过使用_,您可以避免多个lstat调用。

  

与stat函数( 包括设置特殊stat文件句柄 )相同但是stats是符号链接而不是符号链接指向的文件到...(强调我的

来自stat

  

如果stat传递了由下划线组成的特殊文件句柄,则不会执行stat,但stat结构的当前内容来自上一个lstat,{ {1}}或filetest会被退回。

答案 1 :(得分:4)

来自docs for the -X functions

  

-M脚本开始时间减去文件修改时间,以天为单位。

特殊文件句柄avatarDictionary缓存最后的文件统计信息,因此_的任何后续使用都将使用缓存的值。