Como ignorar os erros -ls no find

3

Estou escrevendo um comando find para procurar arquivos ou pastas com permissões quebradas (os arquivos devem ser rw , diretórios rwx ) e tentando ls -l (dar ou receber) os resultados.

O comando find a seguir parece funcionar, mas a parte ls está me causando problemas.

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

Adicionar -ls ou -exec ls -l {} \; ao final funciona até chegar a um diretório que não possa ler. Isso resulta em um erro permission denied e é liberado completamente sem terminar. A execução de ls -ld $(<that command>) funciona, até onde eu sei, mas parece que estou perdendo algo simples em find .

Como um aparte, não estou preocupado com a conformidade POSIX, então prefiro usar -or em vez de -o e por legibilidade.

    
por Jason Lefler 03.07.2014 / 22:06

1 resposta

4

Depois de acessar um diretório que não é executável, find tenta entrar nele, mas não é possível porque, bem, não é executável. Você precisa dizer para não tentar usar -prune .

E coloque essa condição em primeiro lugar, por isso não está em curto-circuito.

find . '(' '(' -not -executable ')' -and -type d -and -prune ')' -or \
       '(' -not -readable ')' -or \
       '(' -not -writable ')'
    
por 03.07.2014 / 23:00