Comment contourner la limitation de shell de 'Liste d'arguments trop longue'?

2

Comment puis-je contourner la limitation du shell bash de "Liste d'arguments trop longue" lors de l'utilisation de caractères génériques de nom de fichier qui correspondent à une tonne de fichiers dans / tmp /?

[my-centos4 tmp] rm -rf /tmp/myLocalFiles*
bash: /bin/rm: Argument list too long
WilliamKF
la source

Réponses:

3

for i in myLocalFiles*; do rm -f $i; done

krnlpanic
la source
3

C’est un peu plus simple que ce que jáquer avait suggéré:

find /tmp -name "myLocalFiles*" -delete
Neil
la source
Ma recherche sur centos4 ne prend pas en charge l'option -delete.
WilliamKF
2
@ WilliamKF: Alors votre find probablement aussi ne supporte pas find ... -exec rm {} +
Dennis Williamson
2
find /tmp -name "myLocalFiles*" -exec rm -rf {} +
jlliagre
la source
2

Pour ceux qui ne peuvent pas utiliser -delete pour trouver une commande, cela fonctionne aussi:

find /tmp -name "myLocalFiles*" -print0 | xargs -0 rm -rf
WilliamKF
la source
1
de #bash channel: "xargs (1) est dangereux (cassé, exploitable, etc.) lors de la lecture d’entrée non délimitée par NUL. Si vous travaillez avec des noms de fichiers, utilisez find's -exec [command] {} + à la place ou -print0 | xargs -0 à condition que vous ne vous souciez pas de la portabilité et que vous aimiez faire un travail supplémentaire inutile. Sinon une belle for boucle."
Édouard Lopez
0

Vous pouvez utiliser des vins cmd

wine cmd
del "Z:\tmp\myLocalFiles*"
exit

L’expansion de Shell fonctionne très bien, mais elle présente certaines réserves. La convention Windows ne souffre jamais de ces problèmes, mais impose un devoir au programmeur. C'est probablement mieux, car l'auteur du shell ne peut pas savoir comment un programme attend ses données d'entrée.

user877329
la source