我正在编写一个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 ')'