GNU/Linux >> Tutoriels Linux >  >> Linux

Rechercher -exec + Vs Rechercher | Xargs :lequel choisir ?

Je comprends que le -exec peut prendre un + option pour imiter le comportement de xargs . Y a-t-il une situation où vous préféreriez une forme plutôt qu'une autre ?

Personnellement, j'ai tendance à préférer la première forme, ne serait-ce que pour éviter d'utiliser une pipe. Je pense sûrement que les développeurs de find doit avoir fait les optimisations appropriées. Ai-je raison ?

Réponse acceptée :

Vous voudrez peut-être enchaîner les appels pour trouver (une fois, quand vous avez appris, que c'est possible, ce qui pourrait être aujourd'hui). Ceci n'est bien sûr possible que tant que vous restez en recherche. Une fois que vous avez redirigé vers xargs, il est hors de portée.

Petit exemple, deux fichiers a.lst et b.lst :

cat a.lst
fuddel.sh
fiddel.sh

cat b.lst
fuddel.sh

Pas d'astuce ici - simplement le fait que les deux contiennent "fuddel" mais qu'un seul contient "fiddel".

Supposons que nous ne le savions pas. Nous recherchons un fichier qui répond à 2 conditions :

find -exec grep -q fuddel {} ";" -exec grep -q fiddel {} ";" -ls
192097    4 -rw-r--r--   1 stefan   stefan         20 Jun 27 17:05 ./a.lst

Eh bien, vous connaissez peut-être la syntaxe de grep ou d'un autre programme pour transmettre les deux chaînes comme condition, mais ce n'est pas le sujet. Chaque programme qui peut retourner vrai ou faux, étant donné un fichier comme argument, peut être utilisé ici - grep n'était qu'un exemple populaire.

Et notez que vous pouvez suivre find -exec avec d'autres commandes de recherche, comme -ls ou -supprimer ou quelque chose de similaire. Notez que cette suppression ne fait pas que rm (supprime des fichiers), mais aussi rmdir (supprime des répertoires).

Une telle chaîne est lue comme une combinaison ET de commandes, tant qu'il n'est pas spécifié autrement (à savoir avec un -or commutateur (et parenthèses (qui doivent être masquées))).

Ainsi, vous ne quittez pas la chaîne de recherche, ce qui est pratique. Je ne vois aucun avantage à utiliser -xargs, car vous devez être prudent lors de la transmission des fichiers, ce que find n'a pas besoin de faire - il gère automatiquement la transmission de chaque fichier comme un seul argument pour vous.

Si vous pensez avoir besoin d'un masquage pour trouver des accolades {}, n'hésitez pas à consulter ma question qui demande des preuves. Mon affirmation est :vous ne le faites pas.

Connexes :adhésion - Trouver un sens - Recherche dans le dictionnaire !
Linux
  1. Grep récursif Vs Find / -type F -exec Grep {} ; Lequel est le plus efficace/rapide ?

  2. Obtenir l'option -exec dans Find To Work ?

  3. Sortir de la recherche si un -exec échoue ?

  4. Comment trouver quel port série est utilisé ?

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

CentOS vs Ubuntu - Lequel choisir pour votre serveur Web

Ubuntu contre. Fedora :lequel choisir ?

Comment trouver quel service écoute sur un port particulier

Comment dire à Xargs quel argument choisir ??

Linux Mint Cinnamon vs MATE :lequel choisir ?

Trouver quel processus modifie un fichier