Como remover muitos (200.000) arquivos?


17

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

usando rm, recebo um erro "A lista de argumentos é muito longa". Eu tentei fazer algo com xargs, mas não sou um Shell Guy, portanto não funciona:

find -name * | xargs rm -f

5
Por que não excluir a pasta e recriá-la após a exclusão?
garconcn

Respostas:


35
$ find /path/to/folder -type f -delete

15
Provavelmente vale a pena mencionar que o GNU find (usado pela maioria das distribuições Linux) pode excluir arquivos por conta própria -delete. Isso também evita problemas com arquivos que contêm aspas ou caracteres de nova linha (embora você possa usar -print0as -0opções do GNU find e GNU xarg para corrigir isso).
DerfK 26/09

3
@ DerfK, boa observação! Além disso, muitas pessoas tendem a brincar xargsenquanto isso findtem -exec command {} +sintaxe.
poige 26/09

5

Você está fazendo tudo certo. É o '*' que lhe dá um problema (o shell está expandindo-o para a lista de arquivos em vez de find). A sintaxe correta pode 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 xargs, mas você dificilmente notará :-))

Como alternativa, você pode escapar do seu '*' assim (no entanto, nesse caso, ele também tentará remover "." E ".."; não é nada demais - você receberá apenas um pequeno aviso :-)):

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

Se seus nomes de arquivos contiverem espaços, use o seguinte:

find . -type f -print0 | xargs -0 rm -f

1
Isso não funciona se você tiver um nome de arquivo que contenha um espaço.
user9517 suportadoGoFundMonica

@lain: Sim, eu estava em um processo de editar a minha resposta para incluir o truque para espaços em branco :-)
dtoubelis

3

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

find . -type f -exec rm {} \;

2
-name '*'não significa "todos os arquivos". Os arquivos são ditos com:-type f
poige 26/09


1

Parabéns pela resposta, aqui estão algumas adições.

Se você deseja excluir arquivos com um padrão de nome específico, pode escrevê-lo assim. Também foi adicionado -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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.