La différence de vitesse sera insignifiante.
Mais vous devez vous assurer que :
-
Votre script ne supposera pas que nofile aura un espace, une tabulation, etc. dans le nom du fichier ; la première version est sûre, la seconde ne l'est pas.
-
Votre script ne traitera pas un fichier commençant par "
-
" en option.
Votre code devrait donc 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 à écrire car vous pouvez ignorer 1, mais la seconde version est plus portable et sûre, car "-exec cmd {} +
" est une option relativement nouvelle dans GNU findutils (depuis 2005, de nombreux systèmes en cours d'exécution ne l'ont pas encore) et elle a été boguée récemment. De plus, beaucoup de gens ne connaissent pas ce "-exec cmd {} +
", comme vous pouvez le voir dans d'autres réponses.
find . | xargs cmd
est plus efficace (il tourne cmd
le moins de fois possible, contrairement à exec
, qui exécute cmd
une fois pour chaque match). Cependant, vous rencontrerez des problèmes si les noms de fichiers contiennent des espaces ou des caractères funky.
Il est suggéré d'utiliser ce qui suit :
find . -print0 | xargs -0 cmd
cela fonctionnera même si les noms de fichiers contiennent des caractères funky (-print0
fait find
affiche les correspondances terminées par NUL, -0
fait xargs
attendez-vous à ce format.)
xargs
moderne Les versions de prennent souvent en charge l'exécution de pipeline parallèle.
Évidemment, cela pourrait être un point pivot lorsqu'il s'agit de choisir entre find … -exec
et… | xargs