Em uma pasta com muitos arquivos como fazer rm em muitos deles [duplicados]

0

Eu experimentei um pouco no linux e acabei recebendo muitos arquivos em uma única pasta. Agora quando tento fazer

rm -f folder/*.png

Eu obtenho

-bash: /bin/rm: Argument list too long

Existe alguma maneira fácil de superar isso?

Trabalho próprio:

Eu suponho que eu poderia fazer um roteiro feio que circula no resultado de algo como

ls /folder/ | head -100 | grep ".*\.png"

Mas, na verdade, deve haver uma maneira mais fácil de fazer o Gnu?

    
por mathreadler 07.12.2015 / 18:30

2 respostas

2

Eu faria algo como:

ls -1 | grep "\.png$" | xargs -L 50 rm -f 

Isso corresponderá (e removerá) somente os arquivos terminados em .png .

    
por 07.12.2015 / 18:36
2

Quando você usa rm -f folder/*.png ou mesmo rm * , o shell (não rm) expandirá o * para todos os arquivos relevantes. Em seguida, ele chamará rm com todos os nomes de arquivos expandidos. (por exemplo, se vai fazer um 'rm filename1 nome do arquivo2 nome do arquivo3 nome do arquivo4 nome do arquivo5 nome do arquivo6 nome do arquivo7 .... nome do arquivo12345'

Se essa lista for muito longa para passar, você receberá este erro.

Solução: Divida-o em partes menores ou não use o shell. Por exemplo. encontrar com --delete é uma boa opção.

  • find /path/to/file -name "*.PNG" -delete \;
  • find /path/to/file -name "*.PNG" -exec rm \; (executa rm uma vez para cada arquivo)
  • find /path/to/file -name "*.PNG" -delete + (agrupa-os em pedaços pequenos o suficiente para passar para rm)

A primeira opção é aquela que eu costumo usar. Primeiro testado com -print.

    
por 07.12.2015 / 19:44