仅搜索具有权限的目录 -find (Bash 4.2)

Posted

技术标签:

【中文标题】仅搜索具有权限的目录 -find (Bash 4.2)【英文标题】:Search only directories with permission -find (Bash 4.2) 【发布时间】:2015-04-25 23:57:46 【问题描述】:

我在 AIX 上有一个命令,可以查找包含短语且超过特定年龄的文件。但是我的报告充满了权限被拒绝的错误。我希望 find 仅搜索它有权访问的文件。

我有适用于 linux 的命令

find /home/ ! -readable -prune -name 'core.20*' -mtime +7 -print

但是在这种情况下,我无法使用可读的。

find /home/ -name 'core.20*' -mtime +7 -print 2>/dev/null

效果很好,但这仍然会尝试搜索目录,花费时间。

【问题讨论】:

【参考方案1】:

只要用你的

find /home/ -name 'core.20*' -mtime +7 -print 2>/dev/null

如果您想在未经许可的情况下跳过目录,您的脚本必须以某种方式向 Unix 请求许可。这正是 find 正在做的事情:当顶层关闭时,没有时间花在下面的树上。唯一的成本是标准错误,这就是您重定向的成本。 当您想针对日常使用进行优化时,您可能希望在每 6 天一次的 crontab 中创建一个文件超过一天未更改的文件,并将日志用作日常 claing 的输入。此解决方案无济于事,而且非常肮脏。只要坚持你的2>/dev/null

【讨论】:

【参考方案2】:

如果对您有用,一个非常简单的修复方法是使用 grep 过滤掉错误,例如:

find /home/ -name 'core.20*' -mtime +7 -print 2>/dev/null | grep -v 'Permission denied'

这将隐藏任何包含短语“Permission denied”(区分大小写)的结果。

HTH!

【讨论】:

感谢您的回答,我已经成功隐藏了结果。但是 -find 仍会尝试搜索目录。这将在更大的系统中花费时间 grep -v 没有做任何事情;错误消息已被2>/dev/null 丢弃。 在那种情况下,我误解了你的问题。我以为你的问题是“但是我的报告充满了权限被拒绝的错误”

以上是关于仅搜索具有权限的目录 -find (Bash 4.2)的主要内容,如果未能解决你的问题,请参考以下文章

centos6.5增加用户,使其具有root权限

Linux/bash 解析文本输出,选择字段,仅忽略一个字段中的空值

Linux SUID SGID SBIT 简介和权限设定

shell bash判断文件或文件夹是否存在

linux 特殊权限 之 SUID 实例

linux下有的目录有可执行权限,为什么?