O GNU find tem a opção -delete, que é sempre segura:
find . -type -f -delete
Como comentado em outro lugar, você pode usar xargs também, mas tenha muito cuidado com o modo como você o usa.
find . -type f -print0 | xargs -0 rm -vf
Eu executei o seguinte comando, de dentro dessas pastas de log. Mas parece que cada pasta levará tempo infinito.
find . -type f -exec rm -v {} \;
rwxrwxr-x 2 root root 77881344 Mar 16 03:06 logs.123
drwxrwxr-x 2 root root 105709568 Nov 14 20:09 logs_15Nov2011
drwxrwxr-x 2 root root 6852608 Aug 1 2011 logs2
drwxrwxr-x 2 root root 286191616 Nov 2 08:40 logs_2Nov
drwxrwxr-x 2 root root 25206784 Nov 10 04:04 logs_del
drwxrwxr-x 4 root root 2686976 Oct 6 01:56 logs_delete
drwxrwxr-x 2 root root 4096 May 11 2011 logsMay112011
drwxrwxr-x 2 root root 69087232 Aug 29 2011 logs_old
drwxrwxr-x 7 root root 382480384 May 9 2011 logs.old905
drwxrwxr-x 2 root root 4096 May 11 2011 logsTR1218
Alguma sugestão melhor e mais rápida do que isso para remover todos esses registros?
O GNU find tem a opção -delete, que é sempre segura:
find . -type -f -delete
Como comentado em outro lugar, você pode usar xargs também, mas tenha muito cuidado com o modo como você o usa.
find . -type f -print0 | xargs -0 rm -vf
Todas as outras respostas assumem que você deseja manter os diretórios, mas não fica claro a partir de sua mensagem original; Além disso, mesmo se você quisesse manter a estrutura, você precisaria remover e recriar os diretórios de qualquer maneira, porque os arquivos do diretório se tornaram muito grandes - eles não encolherão quando você os esvaziar, e seu tamanho irá abrandar maciçamente as operações neles no futuro.
Então você considerou apenas
rm -rf log*
Se você conseguir gerenciar muitos erros quando o rm não conseguir excluir diretórios, você poderá abordar o problema do outro lado
for dir in $(find . -type d)
do
rm $dir/*
done
Tente
find . -type f | xargs rm -vf
Além de reformatar a partição, não vejo nenhuma maneira mais rápida de excluir todos os arquivos.
O problema é que você tem uma quantidade enorme de arquivos nesses diretórios (o tamanho na saída ls -l
que você fornece é enorme!). Para cada rm
, o sistema de arquivos deve fazer o seguinte:
Mesmo se você rm
do diretório, você só se livra do passo # 2 acima, porque você ainda precisa consultar o diretório e decrementar a contagem de links. Consultar o diretório poderia ser otimizar para obter mais de um número de inode no momento, mas em todos os casos, para cada arquivo a ser excluído, o sistema de arquivos deve verificar o inode para a contagem de links e atualizar o inode (ou marcá-lo para exclusão).
Em outras palavras, esta operação é O(n)
do número de arquivos a serem excluídos, o que parece muito grande no seu caso.
Se você não pode formatar sua partição, o que eu acho que é o seu caso ;-), basta iniciar a tarefa em segundo plano ou em um tela e seja paciente.
Outra solução é fazer backup dos arquivos que você deseja manter, formatar a partição e restaurar os arquivos. Talvez seja mais rápido do que excluir todos os arquivos, mas é mais demorado (o find...rm
pode ser esquecido em segundo plano por muitos dias, se necessário ...).