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 !