(duplicado do Stack Overflow: link )
Eu tenho uma necessidade muito específica de encontrar arquivos e diretórios não proprietários no Solaris usando um script, e preciso excluir caminhos completos de diretórios do find, pois eles contêm potencialmente milhares de arquivos sem dono (e é normal porque são arquivos hospedado em outros servidores). Eu nem quero encontrar para pesquisar nesses diretórios, uma vez que irá travar o servidor (cpu spiking para 99% por um longo tempo), portanto, piping os resultados da pesquisa em egrep para filtrar os diretórios não é uma opção.
Eu sei que posso fazer isso para excluir um dos diretórios mais pelo nome:
find / -mount -local \( -type d -a \( -name dir1 -o -name dir2 -o dir3 \) \) -prune -o \( -nouser -o -nogroup \) -print
No entanto, isso corresponderá a dir1 e dir2 em qualquer lugar na estrutura de diretórios de quaisquer diretórios, o que é não o que eu quero.
Eu quero ser capaz de impedir que o mesmo seja encontrado nos seguintes diretórios (como um exemplo):
/opt/dir1
/opt/dir2
/var/dir3/dir4
E eu ainda quero encontrar arquivos e diretórios sem dono nos seguintes diretórios:
/opt/somedir/dir1
/var/dir2
/home/user1/dir1
Eu tentei usar o regex nos argumentos -name, mas desde encontrar apenas as correspondências 'name' contra o nome de base do que encontrar, não posso especificar um caminho. Infelizmente, a descoberta do Solaris não suporta opções de localização do GNU como -wholename ou -path, então estou meio que ferrada.
Meu objetivo seria ter um script com a seguinte sintaxe:
script.sh "/path/to/dir1,/path/to/dir2,/path/to/dir3"
Como eu poderia fazer isso usando o find e o script padrão sh (/ bin / sh) no Solaris (5.8 ou superior)?