On Wed, Apr 20, 2005 at 08:22:26AM +0200, Daniel Cordey wrote: > etendu, mais plus lent. Cette derniere commande donne les moyens de limiter
pour la lenteur de find: c'est juste, c'est dû au fait que la forme: > find . -uid 500 -name \*.py -exec rm {} \; va exécuter (de manière sûre) N fois une commande. exec*() sur UNIX a beau être rapide (caches, copy-on-write, etc), si on l'exécute 100'000 fois on arrive malgré tout à des performances médiocres. Solution intermédiaire: xargs est une commande qui prend des données sur stdin et exécute la commande donnée en paramètre avec à chaque fois un certain nombre des données sur stdin passés comme arguments. (en bref ici: il y aura N/X exécutions de rm, au lieu de N dans le cas ci-dessus, X dépendant de la taille maximum de la ligne de commande et de la taille des arguments, X autocalculé par xargs). find . -uid 500 -name \*.py -print0 \ | xargs -0 rm (on peut supprimer le -0 si l'on est sûr qu'il n'y a pas de séparateurs dans les noms de fichiers, comme des espaces ou des sauts de ligne) inconvénient: - erreur si aucun fichier correspondant trouvé work-around: xargs -0 rm -f unexistant - difficile de détecter une erreur dans l'exécution de find work-around: passer par un fichier temporaire ou un tube nommé et tester les codes de retour. > Ainsi, je peux m'assurer que je n'ai pas d'autres fichiers "oublies" dans la > structure... Ensuite seulement, je substitue 'ls -l' par mon rm. Ceci > s'applique a toutes les commandes shell du style rm, cp, mv, chown, etc. Le risque de sécurité général sur un système multi-utilisateur est lié à des modifications des données entre ces deux phases, en particulier des métadonnées si les commandes citées travaillent sur la destination des liens symboliques (pas le cas de GNU chown à ce que j'ai vu). _______________________________________________ gull mailing list gull@lists.alphanet.ch http://lists.alphanet.ch/mailman/listinfo/gull