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.