Téléchargement
illégal
Posez votre question Signaler

Arg list too long

hawksmoor - Dernière réponse le 19 déc. 2007 à 18:25
Salut à tous,

Voilà, sur unix(version aix) avec :

find . -name *20040623*SCR* -print -exec grep -i completed {} \;

j'ai en retour "arg list too long" .Même après redirection .de même qu'avec le xargs .Faut dire que le(s) batch(s) concernes s'enclenchent toutes les 30s(ouaf!)de 08h à 19h .
Impossible donc(pour l'instant)de visualiser ce qui se passe sous ce repertoire .Kelk'un peut-il m'aider, svp?Merci .
Lire la suite 

Arg list too long »

4 réponses
Réponse
+0
moins plus
Il faut mettre des cotes autour de ton pattern de recherche pour pas qu'il soit interprété par le shell mais pas le find :
find . -name "*20040623*SCR*" -print -exec grep -i completed {} \;
Ajouter un commentaire
Réponse
+0
moins plus
le défaut de cette commande : find . -name "*20040623*SCR*" -print -exec grep -i completed {} \;
est que un grep est exécuté pour chaque fichier.
cette commande : grep -i completed `find . -name "*20040623*SCR*" -print`
exécute un grep pour tout les fichiers trouvés
Ajouter un commentaire
Réponse
+0
moins plus
La commande suggérée par dubcek pose deux problèmes et ne correspond pas à la meilleure pratique:

grep -i completed `find . -name "*20040623*SCR*" -print`

D'abord, rien ne garantit que la liste produite par find ne sera pas si grande qu'on aboutira à nouveau à un "arg list too long", d'autre part elle ne rient pas compte du fait que des directories peuvent avoir des espaces dans leur nom, ainsi un path du genre "/abc<ESPACE>/de<ESPACE>/fgh" sera interprété comme trois arguments de grep: /abc, /de et /fgh, ce qui n'aura évidemment pas de sens.

Dans le même registre, je vous laisse réfléchir aux conséquences possibles d'un script de nettoyage de /tmp du genre:

rm `find /tmp -type f -a -mtime +7`

avec un fichier "/tmp/<ESPACE>/etc/passwd" et un peu de patience...

Le même résultat est obtenu avec:

find /tmp -type f -a -mtime +7 | xargs rm <---- exemple à ne PAS imiter !

Pour éviter le problème, le mieux esr d'écrire la commande comme ceci:

find /tmp -type f -a -mtime +7 -print0 | xargs -0 -n20 rm

Qui a l'avantage d'appeler rm 20 fois moins que la version -exec tout en n'étant pas vulnérable au problème de l'espace.

Les arguments -print0 et -0 de xargs ne sont malheureusement disponibles que dans les versions GNU (Linux), à défaut, autant se tenir à la version -exec, moins performante mais plus sûre.
Ajouter un commentaire
Réponse
+0
moins plus
Le problème vient effectivement des quotes autour du nom. Le find ne produira pas une liste trop longue pour grep vu qu'il va lancer un grep par fichier trouvé.
Par contre la charge peut en prendre un sacré coup.
Ajouter un commentaire
Ce document intitulé « arg list too long » issu de CommentCaMarche (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.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?