Le problème
Lorsque vous essayez de répertorier ou d'interagir avec un grand nombre de fichiers à partir de la ligne de commande, l'erreur suivante s'affiche :
$ ls -l *.xml | wc -l bash: /bin/ls: Argument list too long 0
$ rm *.xml bash: /bin/rm: Argument list too long
ou lorsque vous essayez de supprimer un grand nombre de fichiers à l'aide de la commande find, cela échoue avec le message d'erreur ci-dessous :
$ find /u01/oracle/apps/fs1/EBSapps/appl/xdo/12.0.0/temp/*.xml -mtime +120 -exec rm -v {} \; bash: /usr/bin/find: Argument list too long
La solution
Il existe une limite importante mais finie à la ligne de commande imposée par le noyau et les erreurs affichées ci-dessus indiquent que la limite a été atteinte.
Pour contourner ce problème, xargs peut être utilisé, qui accepte une liste de noms de fichiers à partir de son entrée standard et exécute une commande dessus. Vous pouvez utiliser "find" en combinaison avec "xargs" comme ci-dessous :
# find . -type f -name '*.xml' | xargs rm
REMARQUE :La commande ci-dessus supprimera tous les fichiers avec une extension .xml dans le répertoire courant sans aucune confirmation. Je vous recommande de commencer par sauvegarder les fichiers nécessaires avant de les exécuter. Il est toujours bon de vérifier sur une machine de test et de vérifier avant de procéder sur la machine de production.