Lista de argumentos muito longa ao remover arquivos na lixeira

1

Eu tenho cerca de 1.000.000 de imagens PNG para remover da minha lixeira. Eu tentei:

  1. rm -rf /home/ahmed/.local/share/Trash/*

  2. find . -name '*' | xargs rm -v

Eu tenho o seguinte

bash: /usr/bin/find: Argument list too long
    
por vincent 12.04.2017 / 14:57

2 respostas

4

ARG_MAX está sendo acionado no processo de listagem / remoção.

Você pode:

  • Deixar que find manipule a remoção, ela processa inerentemente ARG_MAX :

    find /home/ahmed/.local/share/Trash/ -type f -iname '*.png' -delete
    
  • Alavanque uma for de construção, isto é lento BTW:

    for f in /home/ahmed/.local/share/Trash/*.[Pp][Nn][Gg]; do 
        [[ -f $f ]] && rm "$f"
    done
    
por heemayl 12.04.2017 / 15:15
1

O shell expande o curinga * para todos os nomes de arquivos, o que sobrecarrega o comprimento máximo da linha de comando. Embora no seu segundo exemplo, isso não pode acontecer, porque o asterisco está entre aspas '*' .

Para remover todo o diretório, você também pode remover o próprio diretório

rm -rf /home/ahmed/.local/share/Trash

Observe o caractere curinga ausente no final.

Outra abordagem para evitar esse tipo de erro com find pode ser usar -type f . Esta opção seleciona todos os arquivos comuns, por exemplo,

find . -type f | xargs rm -v

No entanto, com 1.000.000 de arquivos, eu evitaria a opção -v .

    
por Olaf Dietsche 12.04.2017 / 15:57