Eu queria excluir alguns arquivos Python .pyc. Primeiro, procurei por eles. (Eu sempre quero ver o que estou destruindo antes de fazer isso.)
find . -name *.pyc
Ele retornou cerca de uma dúzia de arquivos pyc. Agora, para excluir.
find
tem a -delete
opção de deletar tudo o que encontrar. Então, eu rapidamente coloquei isso no comando anterior:
# DON'T DO THIS
find . -delete -name *.pyc
Depois fui continuar meu trabalho. Mas tudo se foi. Eu havia excluído a árvore inteira!
Eu deveria colocar -delete
depois de -name
:
# the right way to delete what it finds
find . -name *.pyc -delete
Este foi um lembrete doloroso que find
simplesmente executa as expressões passadas a ele na ordem da esquerda para a direita enquanto aplica quaisquer operadores dados, como e / ou / não. (Veja OPERATORS
no man find
.)
Quando eu tinha o direito após o caminho, estava basicamente dizendo para atravessar a árvore, excluir cada item à medida que os encontrasse e, em seguida, combiná-lo com o nome fornecido (o que não acontece porque foi excluído).-delete
find