Lequel est le plus efficace sur un très grand ensemble de fichiers et devrait être utilisé?
find . -exec cmd {} +
ou
find . | xargs cmd
(Supposons qu'il n'y a pas de personnages amusants dans les noms de fichiers)
Lequel est le plus efficace sur un très grand ensemble de fichiers et devrait être utilisé?
find . -exec cmd {} +
ou
find . | xargs cmd
(Supposons qu'il n'y a pas de personnages amusants dans les noms de fichiers)
Différence de vitesse sera insignifiant.
Mais vous devez vous assurer que:
Votre script ne sera pas supposer qu'aucun fichier aura pas d'espace, tabulation, etc nom de fichier; la première version est coffre-fort, la seconde ne l'est pas.
Votre script ne sera pas traiter un fichier commençant par "-
" comme une option.
Ainsi, votre code devrait ressembler à ceci:
find . -exec cmd -option1 -option2 -- {} +
ou
find . -print0 | xargs -0 cmd -option1 -option2 --
La première version est plus courte et plus facile d'écrire que vous pouvez ignorer 1, mais
la deuxième version est plus portable et fort,"-exec cmd {} +
" est relativement nouvelle option dans GNU findutils (depuis 2005, beaucoup de systèmes en cours d'exécution, elle ne sera pas encore) et il a été buggy récemment. Aussi beaucoup de gens ne savent pas ce "-exec cmd {} +
", comme vous pouvez le voir à partir d'autres réponses.
find . | xargs cmd
est plus efficace (il s'exécute cmd
peu de fois que possible, à la différence de exec
, qui s'exécute cmd
une fois pour chaque match). Cependant, vous serez confronté à des problèmes si les noms de fichiers contenant des espaces ou funky caractères.
Le suivant est suggéré:
find . -print0 | xargs -0 cmd
ça va marcher, même si les noms de fichiers contiennent funky caractères (-print0
fait find
imprimer NUL de terminaison correspond, -0
fait xargs
s'attendre à ce format.)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.