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 评估的是目录,而不是文件的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本,怎样将某个目录下的所有文件的后缀改为.bak