linux - 使用 Perl 快速清理目录

标签 linux perl rm

我需要清理我的网络服务器上包含数百万个日志文件的目录。我找到了 this great article关于如何做到这一点。然而,我对这一行感兴趣的是一些有趣的事情。

这是我感兴趣的 Perl 代码:

for(<*>){((stat)[9]<(unlink))}

perl -e 'code' 运行.

所以,这是我的问题:

  1. for(<*>)构造 - 我假设它遍历当前目录中的文件。但是它在哪里存储迭代器?
  2. statunlink函数至少需要一个参数,我假设......但是它在哪里?
  3. 为什么调用 (stat)[9] 的结果与调用 (unlink) 的结果进行比较?它会产生什么结果?

抱歉,我是一个不懂 perl 的人,因此我不理解所有这些 Perl 缩写。这就是我问这个问题的原因。

谢谢!

最佳答案

一个类轮需要很多捷径:

  1. <*> 是钻石算子的特例。您不能访问迭代器对象,就像在其他语言中一样。在这里,它调用 glob功能。在列表上下文中,它从所有结果中返回一个列表(它们是文件的行,或者在您的情况下是目录的内容。它的返回值被传递给 for,它遍历列表和别名$_ 中的值。$_ 是许多函数的“默认变量”……
  2. 这让我们来到了这里。许多核心功能默认为 $_没有争论。也是 unlink stat .
  3. (stat)[9]表示执行 stat在列表上下文中并选择第 10 个结果(索引从零开始,这是修改时间)。 (将其与 $foo[9] 之类的数组访问进行比较)。

关于linux - 使用 Perl 快速清理目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27799548/

相关文章:

linux - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 'libhugetlbfs.so':忽略

Python 多处理。你如何从 child 那里得到 parent 的地位?

arrays - 如何将数组存储为 Perl 散列中的值?

linux - Linux 启动时守护进程 perl 脚本

linux - 在 Linux 中删除所有没有以下扩展名的文件

git - 如何删除一个空文件夹并推送该更改?

linux - 如何在 docker-machine 中保存对 boot2docker 的更改?

regex - SED 脚本 - 排除 self

arrays - 循环遍历哈希中包含的数组

Linux/Unix 从远程列表中删除文件