O que você está tentando fazer é a exclusão recursiva. Para isso, você precisa de uma ferramenta recursiva, como find .
find FOLDER -type f -delete
Digamos que eu tenha uma árvore de diretórios como esta:
FOLDER:
file1
file2
file3
Subfolder1:
file1
file2
Subfolder2:
file1
file2
Se eu usasse rm -r FOLDER/* , tudo na FOLDER seria excluído, incluindo os subdiretórios. Como posso excluir todos os arquivos no FOLDER e em seus subdiretórios sem excluir diretórios reais?
O que você está tentando fazer é a exclusão recursiva. Para isso, você precisa de uma ferramenta recursiva, como find .
find FOLDER -type f -delete
com bash :
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Aqui iterando sobre os nomes de arquivos expandidos glob e removendo apenas arquivos.
O exemplo acima é de execução a seco, se estiver satisfeito com as alterações a serem feitas, remova echo para a remoção real:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Por fim, desmarque globstar :
shopt -u globstar
Com zsh , aproveitando o qualificador glob:
echo -- FOLDER/**/*(.)
(.) é o qualificador glob, que limita as expansões glob para apenas arquivos regulares.
O texto acima apenas imprime os nomes dos arquivos, para remoção real:
rm -- FOLDER/**/*(.)
Se a sua versão de find não suportar -delete , você poderá usar o seguinte para excluir todos os arquivos no diretório atual e abaixo.
find . ! -type d -exec rm '{}' \;
Tags command-line rm