Como remover muitos arquivos (200 000)?

17

Eu preciso remover 200.000 arquivos (todos eles) de uma pasta e não quero excluir a própria pasta.

usando rm, recebo um erro "Argument list too long". Eu tentei fazer algo com xargs, mas não sou um Shell Guy, então não funciona:

find -name * | xargs rm -f
    
por FMaz008 26.09.2011 / 18:03

5 respostas

35
$ find /path/to/folder -type f -delete
    
por 26.09.2011 / 18:06
5

Você está fazendo tudo certo. É o '*' que lhe dá um problema (o shell está expandindo-o na lista de arquivos em vez do find ). A sintaxe correta poderia ser:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(O último é um pouco menos eficiente, pois passará nomes mais longos para xargs , mas você dificilmente notará :-))

Alternativamente, você pode escapar do seu '*' como este (no entanto, nesse caso, ele também tentará remover "." e ".."; não é um problema - você apenas receba um pequeno aviso :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Se os nomes dos seus arquivos contiverem espaços, use isto:

find . -type f -print0 | xargs -0 rm -f
    
por 26.09.2011 / 18:20
3

O comando a seguir excluirá todos os arquivos do diretório atual :

find . -type f -exec rm {} \;
    
por 26.09.2011 / 18:15
2

você pode tentar

find /path/to/folder -type f -print0  | xargs -0 rm -f

ou

find /path/to/folder -type f -exec rm -f "{}" +
    
por 26.09.2011 / 18:07
1

Kudos to quantas resposta, aqui estão algumas adições.

Se você gosta de excluir arquivos com um padrão de nome específico, pode escrevê-lo assim. Também adicionou -print para que você possa ver o que está acontecendo enquanto os arquivos estão sendo excluídos.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Isto, por exemplo, exclui todos os jpegs no meu diretório.

    
por 05.05.2014 / 11:29