Il semble y avoir un certain nombre de façons de le faire, y compris des boucles dans le script shell, find et xargs. Laquelle de ces options est la meilleure et la plus portable?
command-line
scripting
directory
find
Brian Lyttle
la source
la source
-name "*.c"
ou par exemple-type d
pour les répertoires ...find ... | xargs ...
idiome, il traite les fichiers par lots, et cela sera généralement plus rapide (moins de processus lancés).Utilisez l'
-print0
option pour rechercher et l'-0
option pourxargs
si vous avez des noms de fichiers ou de répertoires avec des espaces:L'
-print0
option de recherche imprime les noms de fichiers sousNUL
forme de liste séparée plutôt que d'espaces séparés, tandis que l'-0
option de luixargs
demander de briser son entréeNUL
plutôt que d'espaces. Étant donné queNUL
c'est l'un des caractères qui n'est pas autorisé dans les noms de fichiers Unix, il n'y a aucun moyen de le confondre avec une partie d'un nom de fichier.L'
-r
option est là pour quexargs
cela ne vous donne pas d'erreur si elle n'a pas d'entrée.la source
Si la portabilité est un problème, je resterais à l'écart des méthodes spécifiques au shell (il y a beaucoup de gens qui utilisent beaucoup de shells différents, mais en général find et xargs sont vraiment des outils de base que personne n'oserait changer radicalement) .
L'utilisation d'arguments de base de find et xargs devrait vous donner une solution plus portable.
la source
Si le regroupement des arguments est acceptable, recherchez | xargs donnera probablement de meilleures performances, car il exécutera la commande beaucoup moins de fois que find -exec. Si vous souhaitez exécuter la commande à chaque fois pour chaque fichier ou l'exécuter dans le sous-répertoire du fichier, vous devez probablement utiliser find -exec ou -execdir.
En règle générale, il est préférable de rester à l'écart des boucles spécifiques au shell; find & xargs sont suffisants pour la plupart des scénarios.
la source
Assurez-vous que la version de la commande que vous utilisez n'a pas déjà d'indicateur pour une opération récursive. :)
la source
Fonctionne le mieux pour moi.
la source