de l'homme
-exec commande ;
Exécution de la commande; vrai si 0 statut est retourné. Tous les suivants
arguments à trouver sont prises pour être les arguments de la commande jusqu'à ce que
un argument consistant ';' est rencontré. La chaîne de caractères '{}'
est remplacé par le nom du fichier en cours en cours de traitement partout
il se produit dans les arguments de la commande, et pas seulement dans les arguments
où il est seul, comme dans certaines versions de trouver. Ces deux
constructions pourraient avoir besoin d'être échappés (avec un '\') ou d'une citation à
les protéger de l'expansion par le shell. Voir les EXEMPLES de la sec-
tion pour des exemples de l'utilisation de l' "- exec " option. La spéci-
fied de commande est exécuté une fois pour chaque fichier correspondant. La commande est
exécutée dans le répertoire de démarrage. Il y a des inévitables
les problèmes de sécurité qui entourent l'utilisation de l'option-exec; vous
devrait utiliser l'-execdir option à la place.
-exec commande {} +
Cette variante de l'option-exec exécute la commande spécifiée sur
les fichiers sélectionnés, mais la ligne de commande est construit en ajoutant
chaque nom de fichier sélectionné à la fin; le nombre total de invoca-
tions de la commande sera beaucoup moins que le nombre de
fichiers correspondants. La ligne de commande est construit de la même façon
que xargs construit ses lignes de commande. Une seule instance de '{}'
est autorisé à l'intérieur de la commande. La commande est exécutée dans
l'
répertoire de départ.
donc, la façon dont je le comprends, \, qui exécute des commandes séparées et + ajoute chaque nom. c'est en fait la façon dont elle est exécutée, comme le \ est une évasion de sorte que son
ls testdir1; ls testdir2
vs
ls testdir1 testdir2
faire ci-dessus dans ma coquille en miroir de la sortie de votre question.
Mise à JOUR 2
Alors, pourquoi voudriez-vous d'utiliser +
dire que j'ai deux fichiers 1.tmp et 2.tmp
1.tmp:
1
2
3
2.tmp:
0
2
3
l'exécution de
find *.tmp -exec diff {} \;
> diff: missing operand after `1.tmp'
> diff: Try `diff --help' for more information.
> diff: missing operand after `2.tmp'
> diff: Try `diff --help' for more information.
où si vous utilisez + et concaténer les trouve des résultats comme suit:
find *.tmp -exec diff {} \+
1c1,3
< 1
---
> 0
> 2
> 30
donc dans ce cas c'est la différence entre les diff 1.tmp; diff 2.tmp et diff 1.tmp 2.tmp
Il y a des cas où \; est approprié et + sera nécessaire. à l'aide de + avec rm est l'un de ces cas, où si vous êtes en train de supprimer un grand nombre de fichiers de vitesse dans beaucoup améliorée au cours de ;. J'aime toujours apprendre plus au sujet de trouver, c'est un outil puissant et pratique util j'espère que c'est suffisant pour expliquer les différences.