如何忽略 find 中的 -ls 错误

如何忽略 find 中的 -ls 错误

我正在编写一个find命令来查找权限被破坏的文件或文件夹(文件应该是rw,目录rwx)并尝试ls -l(给出或获取)结果。

以下find命令看起来可行,但这ls部分给我带来了麻烦。

find . '(' -not -readable ')' -or \
       '(' -not -writable ')' -or \
       '(' '(' -not -executable ')' -and -type d ')'

在末尾添加-ls-exec ls -l {} \;会起作用,直到到达无法读取的目录为止。这会产生一个permission denied错误并在没有完成的情况下完全退出。ls -ld $(<that command>)据我所知,运行有效,但感觉我错过了find.

顺便说一句,我并不担心 POSIX 合规性,所以我宁愿使用-or而不是-o等来提高可读性。

答案1

一旦您到达不可执行的目录,find尝试进入它,但它不能,因为它不可执行。您需要告诉它不要尝试使用-prune.

并将该条件放在第一位,这样就不会短路。

find . '(' '(' -not -executable ')' -and -type d -and -prune ')' -or \
       '(' -not -readable ')' -or \
       '(' -not -writable ')'

相关内容