GNU/Linux >> Tutoriels Linux >  >> Linux

trouver -exec cmd {} + vs | xarg

La différence de vitesse sera insignifiante.

Mais vous devez vous assurer que :

  1. 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.

  2. 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


Linux
  1. Rechercher -exec + Vs Rechercher | Xargs :lequel choisir ?

  2. Impression du nom de fichier avec les résultats de Grep dans Find -exec ?

  3. Reformatage d'un grand nombre de fichiers XML ?

  4. rechercher et copier un fichier à l'aide de Bash

  5. Utilisation à la fois du nom de base et du chemin complet dans find -exec

Commande Xargs sous Linux

Comment puis-je utiliser des commandes aliasées avec xargs ?

trouver -exec une fonction shell sous Linux ?

Comment puis-je exécuter plusieurs commandes lors de l'utilisation de find ?

trouver :-exec rm {} \ ; vs. -delete - pourquoi le premier est-il largement recommandé ?

Quelle est la bonne syntaxe find -exec