Shell 脚本 find cmin 评估的是目录,而不是文件

Posted

技术标签:

【中文标题】Shell 脚本 find cmin 评估的是目录,而不是文件【英文标题】:Shell script find cmin evaluates on directory, not on files 【发布时间】:2018-05-12 01:13:34 【问题描述】:

我有一个包含文件的目录,当该目录中的文件超过 10 分钟时,我希望收到来自我们监控的通知。 通过我们的监控,我正在创建一个 SSH 会话,该会话执行一个 shell 脚本来检查目录中文件的年龄。

shell 脚本仅显示已检查目录中超过 10 分钟的文件,而不显示单个文件。

见下面的例子(我在 11 月 27 日 09:22 测试了这个例子)

有超过 10 分钟的文件(从 11 月 27 日 09:22 开始):

system:/mls_bmp/indir/BT> ll
-rw-r--r-- 1 sonic sonic 845 Nov 24 08:04 BRMLREL20171124080420572
-rw-r--r-- 1 sonic sonic 845 Nov 24 08:17 BRMLREL20171124081723685
-rw-r--r-- 1 sonic sonic 845 Nov 24 08:17 BRMLREL20171124081729805
-rw-r--r-- 1 sonic sonic 845 Nov 27 08:49 BRMLREL20171127084911037
-rw-r--r-- 1 sonic sonic 845 Nov 27 08:49 BRMLREL20171127084920817

但是,此查找命令显示数量为 0:

system:/mls_bmp/indir> find /mls_bmp/indir/BT -prune -cmin +10 -exec ls  \; | wc -l | xargs
0

这是因为我检查的目录小于 10 分钟(从 11 月 27 日 09:22 开始):

system:/mls_bmp/indir> ll
drwxrwxrwx 4 oracle dba 20480 Nov 27 09:15 BT

我不想检查子目录,因此不能使用以下语句:find /mls_bmp/indir/BT/* -prune -cmin +10 -exec ls \; | wc -l | xargs

【问题讨论】:

不是-prune,不如-type f -maxdepth 1 【参考方案1】:

find 从指定目录开始,然后查看其内容(然后查看其内容等)。这意味着-prune 适用于目录(/mls_bmp/indir/BT),并阻止find 查看其中的文件。正如@BenjaminW 在评论中所说,请改用-type f -maxdepth 1

【讨论】:

好的,谢谢你的建议。目前我正在使用 AIX 系统,其中 maxdepth 函数不可用,因此我不得不使用 -prune 参数。我将检查是否可以更新 find 命令以获取最新版本,以便我可以使用 maxdepth 参数。 @PeterSondag 根据man page at ibm.com,AIX 的find 命令有一组非常少的表达式术语。您可能可以使用find /mls_bmp/indir/BT -type f -cmin +10 -exec ls \; -o '!' -name BT -prune

以上是关于Shell 脚本 find cmin 评估的是目录,而不是文件的主要内容,如果未能解决你的问题,请参考以下文章

find选项-cmin和-amin有什么区别?

shell删除三天前或者三天内的文件

shell脚本,怎样将某个目录下的所有文件的后缀改为.bak

shell删除文件夹脚本怎么写?,保留2天内的文件夹,2天以前的是直接删除,每周二、四、六删一次

linux下用shell删除三天前或者三天内的文件

find命令参数及其详解