No meu computador quando uso:
find . \( -name dirname -type d \) -exec rm -r '{}' ';'
Os diretórios são excluídos, mas eu recebo o erro:
find: ‘./dirname’: No such file or directory
para cada diretório.
Como meus diretórios não estão vazios, a opção -delete não funcionará para mim. Encontrei o motivo desse comportamento aqui :
- find obtém (não necessariamente) a primeira entrada no diretório ./. isso seria, por exemplo, dir.1 /
- compara-o ao padrão 'dir.?'. isso combina? sim.
- find executa "rm -r dir.1".
- find tenta digitar dir.1 / para encontrar o padrão dentro do diretório não sabe nada sobre o comando exec.
- não encontra dir.1 / anymore. retorna ENOENT (veja a saída do strace)
Eu usei isso para solucionar o problema:
rm -r `find . -name dirname -type d`
Lembre-se de que o find ainda tentará recursar nos diretórios denominados dirname, o que não é realmente necessário e levará mais tempo. Dependendo da sua estrutura de diretórios, você poderá contornar isso com a --depth
opção find. Além disso, se você tiver uma estrutura de diretórios como dirname / foo / dirname, receberá rm "Não existe esse arquivo ou diretório". Para suprimir os erros, você pode redirecionar o stderr para / dev / null ou usar o -f
sinalizador (force) com rm.
-delete
opção.