Como excluir as pastas proc e sys da pesquisa com o comando find?

10

Eu queria executar um script que escolhe um caminho de diretório aleatório:

find / -type d | shuf -n1 

Infelizmente, recebo mensagens de erro sobre a proibição de inserir determinados diretórios.

Como posso excluir um diretório da pesquisa com find?

Abdul Al Hazred
fonte

Respostas:

13

Para excluir caminhos específicos, no Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

Outra abordagem é dizer findpara não recuar sob diferentes sistemas de arquivos.

find / -xdev -type d

Você também pode usar o find para consultar um banco de dados de nomes de arquivo (geralmente atualizado todas as noites, também pode ser atualizado manualmente usando updatedb) em vez do sistema ativo.

locate '*' | shuf -n 1
Gilles 'SO- parar de ser mau'
fonte
ótimo, curto e perspicaz. find / -xdev -type d funciona, mas encontra / -xdev -type d | shuf -n 1 exibe mensagens de erro.
Abdul Al Hazred
1
@AbdulAlHazred você não disse quais mensagens, mas acho que são erros de "permissão negada". Execute o comando como root ou simplesmente ignorar os erros enviando-os para stderr: find / -xdev -type d 2>/dev/null.
terdon
1
Não foi possível você simplesmente find / \( -path /sys -o -path /proc \) -prune -o -type dseria útil se você quiser excluir mais dirs como /devou /tmp, etc.
BrainStone
6

com o GNU find, você também pode usar as opções de regex, por exemplo:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
Jose
fonte
essa é a abordagem mais agradável, de longe (discurso: por isso há uma opção de gnu que faz encontrar / utilizável em gnu linux como em qualquer outro sistema operacional que não têm uma implementação de merda / proc ;-)
Florian Heigl