OVH Cloud OVH Cloud

find = Argument list too long

13 réponses
Avatar
Laurent Lecatelier
Bonsoir,

J'ai créé un petit service sur le net qui permet de stocker de façon
éphémere des images ou des fichiers sur le net ( cjoint.com)
Tant que ce truc était peu connu tout marchait bien. Maintenant, j'ai du
dépasser une limite car ma commande :
-----------
find [chemin d'acces]/*.* -maxdepth 1 -type f -mmin +20160 -print | xargs rm
-----------
me rend "Argument list too long"

Le web ne m'aide pas beaucoup sur ce coup car il est dit partout "...quand
vous avez le message "Argument list too long", utilisez la commande find..."
Bon ;-)) Que puis-je faire dans un "cron" quotidien pour vider mes fichiers
qui ont plus de 15 jours ( plusieurs dizaines de milliers...) et ce, de
façon fiable ?

Merci pour votre aide,

Bien amicalement,

--
Laurent Lecatelier
http://cjoint.com

3 réponses

1 2
Avatar
Zobelier
Bonsoir,

J'ai créé un petit service sur le net qui permet de stocker de façon
éphémere des images ou des fichiers sur le net ( cjoint.com)
Tant que ce truc était peu connu tout marchait bien. Maintenant, j'ai du
dépasser une limite car ma commande :
-----------
find [chemin d'acces]/*.* -maxdepth 1 -type f -mmin +20160 -print | xargs rm
-----------
me rend "Argument list too long"

Le web ne m'aide pas beaucoup sur ce coup car il est dit partout "...quand
vous avez le message "Argument list too long", utilisez la commande find..."
Bon ;-)) Que puis-je faire dans un "cron" quotidien pour vider mes fichiers
qui ont plus de 15 jours ( plusieurs dizaines de milliers...) et ce, de
façon fiable ?



L'option -n <num> de la commande xargs permet de ne passer à la commande
qui suit que le nombre num d'arguments.
En clair,
si on exécute xargs rm, il n'y aura qu'une commande rm avec tous les
arguments résultats du find ==> line too long
si on passe xargs -n 10, il y aura autant de commandes rm que
nécessaires avec 10 arguments par commande ===> plus de line too long

Ainsi, chaque ligne rm générée ne dépasse plus la longueur max.

Faire quelques essais en ajoutant echo entre xargs et rm rm permet de
voir ce que donnera la commande.

Avatar
Nicolas George
Zobelier wrote in message <424ab466$:
En clair,
si on exécute xargs rm, il n'y aura qu'une commande rm avec tous les
arguments résultats du find ==> line too long


C'est faux. xargs s'arrête toujours avant la limite de la taille maximale
d'une ligne de commande.

Le problème ici était le glob *.*, qui rendait la ligne de commande de find
lui-même trop longue.

Avatar
Zobelier
Zobelier wrote in message <424ab466$:

En clair,
si on exécute xargs rm, il n'y aura qu'une commande rm avec tous les
arguments résultats du find ==> line too long



C'est faux. xargs s'arrête toujours avant la limite de la taille maximale
d'une ligne de commande.



Exact. Je me demande encore pourquoi j'ai cru avoir déja rencontré ça.

Le problème ici était le glob *.*, qui rendait la ligne de commande de find
lui-même trop longue.


Exact. Mal lu le post. Du bruit pour rien.

Y a des jours où on devrait rester couché (ou au moins muet).


1 2