web-dev-qa-db-fra.com

Liste d'arguments trop longue lors de la suppression de fichiers dans la corbeille

J'ai environ 1 000 000 d'images png à supprimer de ma corbeille. J'ai essayé:

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

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

J'ai le suivant

bash: /usr/bin/find: Argument list too long
1
vincent

ARG_MAX est déclenché dans le processus de listage/suppression.

Vous pouvez:

  • Laissez find gérer la suppression, il gère par nature ARG_MAX:

    find /home/ahmed/.local/share/Trash/ -type f -iname '*.png' -delete
    
  • Tirez parti d'une construction for, c'est lent BTW:

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

Le shell étend le caractère générique * à tous les noms de fichiers, ce qui déborde la longueur maximale de la ligne de commande. Bien que dans votre deuxième exemple, cela ne peut pas se produire, car l'astérisque est entre guillemets '*'.


Pour supprimer tout le répertoire, vous pouvez également supprimer le répertoire lui-même

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

Notez le caractère générique manquant à la fin.


Une autre approche pour éviter ce type d'erreur avec find, pourrait être d'utiliser -type f. Cette option sélectionne tous les fichiers normaux, par ex.

find . -type f | xargs rm -v

Avec 1 000 000 de fichiers, j'éviterais l'option -v.

1
Olaf Dietsche