Como esta pergunta está constantemente no topo do Google quando procuro por mim:
As outras respostas sofrem de problemas diferentes:
-
Alguns deles incluem .
e ..
, o que é barulhento, confuso e irritante.
-
Alguns deles esquecem arquivos ocultos (arquivos que começam com um ponto).
-
Eles não são excluídos em uma ordem correta (mais profunda primeiro) para permitir a exclusão do diretório.
-
Eles entram em outros sistemas de arquivos (montados), o que geralmente é indesejado.
-
Eles são difíceis de estender corretamente com parâmetros extras (mais sobre isso abaixo).
Então, para RECURSIVELY excluir todos os arquivos e pastas em um diretório, faça o seguinte:
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note que adicionei um argumento -xdev
para evitar a descida para montagens (como /proc
etc.).
Por que não -depth
ou -delete
?
Apesar das pessoas estarem constantemente me rebaixando por isso, esses métodos têm uma desvantagem: eles não parecem ser extensíveis o suficiente para permitir -prune
ing um subdiretório (sem introduzir mais problemas). Por contraste com este método, você poderia inserir
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
antes do argumento -mindepth
para excluir subdir
de ter seu conteúdo excluído.