$ find /path/to/folder -type f -delete
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
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
O comando a seguir excluirá todos os arquivos do diretório atual :
find . -type f -exec rm {} \;
você pode tentar
find /path/to/folder -type f -print0 | xargs -0 rm -f
ou
find /path/to/folder -type f -exec rm -f "{}" +
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.