Suppression impossible : liste d'arguments trop longue

Suppression impossible : liste d'arguments trop longue

Finalité

Je souhaite supprimer des fichiers (par exemple tous les fichiers d'extension .toto) dans un répertoire mais la commande "rm *.toto" me renvoie :

bash: /bin/rm: Argument list too long

ou

bash: /bin/rm: Liste d'arguments trop longue

Causes

Ceci est dû à une limitation de la commande rm, qui ne permet pas de gérer un grand nombre d'arguments (le joker '*' est développé par le shell en une série d'arguments).

Solutions

Commande xargs

La solution consiste à envoyer successivement chaque argument à rm à l'aide de la commande xargs, selon une des façons suivantes :

ls *.toto | xargs rm
find . -type f -name \*.toto | xargs rm

Commande find

Une seconde solution consiste à utiliser la commande find et le paramètre -exec :

find . -name "*.toto" -exec rm {} \;

Boucle for (bash)

Une autre alternative consiste à exécuter une boucle en script shell :

for i in `seq 0-9`a b c d e f g h i j k l m n o p q r s t u v w x y z ; do rm $i*.toto ; done

Programme Perl

encore une solution avec perl

perl -e 'for(</home/lami20j/*.toto>){unlink}'
Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche.
A voir également
Ce document intitulé « Suppression impossible : liste d'arguments trop longue » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.