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

10 réponses

1 2
Avatar
Nicolas George
"Laurent Lecatelier" wrote in message
<424441ef$0$32723$:
find [chemin d'acces]/*.* -maxdepth 1 -type f -mmin +20160 -print | xargs rm
^^^

Le problème est là : ce *.* est évalué avant l'appel à find, et il donne
trop de fichiers.
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 ?


Il faudrait plus de détails sur l'organisation de ces fichiers.

Avatar
Laurent Lecatelier
Bonjour

Merci pour le coup de main ;-)

Il faudrait plus de détails sur l'organisation de ces fichiers.


C'est un unique répertoire avec tous les fichiers transmis par les
utilisateurs. 20000 entrées, 500 Mo en gros. Il y a de tout....du zip, du
rar, du xls, du pdf, plein de JPG, gif, html. Les noms sont complexes mais
avce des caractères "normaux" car je vire les caractères spéciaux (accents
etc...) avant de stocker les fichiers. Que puis je dire de plus ?

Amicalement,

--
Laurent Lecatelier

Avatar
Nicolas George
"Laurent Lecatelier" wrote in message
<42444a95$0$2768$:
C'est un unique répertoire avec tous les fichiers transmis par les
utilisateurs. 20000 entrées, 500 Mo en gros. Il y a de tout....du zip, du
rar, du xls, du pdf, plein de JPG, gif, html. Les noms sont complexes mais
avce des caractères "normaux" car je vire les caractères spéciaux (accents
etc...) avant de stocker les fichiers. Que puis je dire de plus ?


Ça suffit amplement. Déjà, il y avait une petite erreur, puisque *.* rate
tous les fichier dont le nom ne comporte pas de point.

Pour l'opération, un simple find comme :

find chemin -type f <options pour le temps> | xargs

devrait faire l'affaire. Je conseillerais plutôt :

cd chemin || exit $?
find . -type f <...> | xargs

qui a l'avantage de faire des lignes plus courtes.

Avatar
Jacques L'helgoualc'h
Le 25-03-2005, Nicolas George <nicolas$ a écrit :
[...]
Pour l'opération, un simple find comme :

find chemin -type f <options pour le temps> | xargs

devrait faire l'affaire. Je conseillerais plutôt :

cd chemin || exit $?
find . -type f <...> | xargs

qui a l'avantage de faire des lignes plus courtes.


Il faut aussi se méfier des espaces dans les noms de fichiers

find -type f -ctime +42 -print0 | xargs --null rm -f

--
Jacques L'helgoualc'h

Avatar
Etienne de Tocqueville
"Laurent Lecatelier" a écrit sur fr.comp.os.unix :

find [chemin d'acces]/*.* -maxdepth 1 -type f -mmin +20160 -print | xargs rm


Je ne vois pas trop ce qu'apporte ton "/*.*"... Logiquement, tu
obtiendrais la même chose avec :

find [chemin d'acces] -maxdepth 1 -type f -mmin +20160 -print | xargs rm

Enfin, presque la même chose, puisque les fichiers ou répertoires qui se
trouvent directement dans le répertoire [chemin d'acces] et qui n'ont
pas de "." dans leur nom seront pris en compte avec ma commande mais pas
avec la tienne.

Cela dit, je ne pense pas que le fait d'exclure les fichiers et
répertoires ne contenant pas de point soit volontaire ;-)

Avatar
Nicolas George
Jacques L'helgoualc'h wrote in message
<slrnd48m57.qik.lhh+:
Il faut aussi se méfier des espaces dans les noms de fichiers


Le monsieur avait dit qu'il refusait les caractères spéciaux dans les noms
de fichiers.

Avatar
Laurent Lecatelier
Bonsoir

Je ne vois pas trop ce qu'apporte ton "/*.*"... Logiquement, tu
...
Cela dit, je ne pense pas que le fait d'exclure les fichiers et
répertoires ne contenant pas de point soit volontaire ;-)


Je suis rouge de honte, plus ou moins vingt années de msdos, ca laisse des
sequelles ;-)
Merci à tous, en retirant le *.* c'est nettement mieux ;-)

Si quelqu'un a fini de lire son exemplaire d'Unix pour les nuls....

Bien amicalement,

--
Laurent Lecatelier

Avatar
Jacques L'helgoualc'h
Le 25-03-2005, Nicolas George <nicolas$ a écrit :
Jacques L'helgoualc'h wrote in message
<slrnd48m57.qik.lhh+:
Il faut aussi se méfier des espaces dans les noms de fichiers


Le monsieur avait dit qu'il refusait les caractères spéciaux dans les noms
de fichiers.


Le cas de l'espace n'était pas spécifié, « spéciaux (accents etc...) » ;
autant rester prudent.
--
Jacques L'helgoualc'h


Avatar
Jérémy JUST
On Fri, 25 Mar 2005 21:01:00 +0100
Etienne de Tocqueville <et+ wrote:

find [chemin d'acces] -maxdepth 1 -type f -mmin +20160 -print | xargs
rm

Enfin, presque la même chose, puisque les fichiers ou répertoires qui
se trouvent directement dans le répertoire [chemin d'acces] et qui
n'ont pas de "." dans leur nom seront pris en compte avec ma commande
mais pas avec la tienne.


Pour corriger ça:

$ find [chemin d'acces] -name '*.*' -maxdepth 1 -type f -mmin +20160...


--
Jérémy JUST

Avatar
Etienne de Tocqueville
Jérémy JUST a écrit sur fr.comp.os.unix :

On Fri, 25 Mar 2005 21:01:00 +0100
Etienne de Tocqueville <et+ wrote:

find [chemin d'acces] -maxdepth 1 -type f -mmin +20160 -print | xargs
rm

Enfin, presque la même chose, puisque les fichiers ou répertoires qui
se trouvent directement dans le répertoire [chemin d'acces] et qui
n'ont pas de "." dans leur nom seront pris en compte avec ma commande
mais pas avec la tienne.


Pour corriger ça:

$ find [chemin d'acces] -name '*.*' -maxdepth 1 -type f -mmin +20160...


Pas tout a fait équivalant ! La commande initiale ne rentrait pas dans
les répertoires sans point qui se trouvait directement dans le
répertoire [chemin d'acces], alors que cette commande le fait.

Mais bon, cette subtilité du point était involontaire, donc inutile de
spécifier l'option -name


1 2