仅搜索具有权限的目录 -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)的主要内容,如果未能解决你的问题,请参考以下文章