Quelle est la signification de {} + dans la commande -exec de find?
23
Je veux connaître la signification de {} +dans la execcommande et quelle est la différence entre {} +et {} \;. Pour être exact, quelle est la différence entre ces deux:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Il est décrit en man find(1)détail, facilement accessible à tous. Ne sois pas paresseux.
Miroslav Koškár
Merci cher Miroslav, j'ai cherché man exec!
Ah, je n'avais jamais rencontré l' {} +utilisation auparavant. J'utilise normalement des xargs pour cela (et souvent find ... -print0 | xargs -0 ...)
Réponses:
27
L'utilisation de ;(point-virgule) ou +(signe plus) est obligatoire pour terminer les commandes shell appelées par -exec/ execdir.
La différence entre ;(point-virgule) ou +(signe plus) réside dans la façon dont les arguments sont passés dans le paramètre -exec/ de find -execdir. Par exemple:
l'utilisation ;exécutera plusieurs commandes (séparément pour chaque argument),
Tous les arguments suivants findsont considérés comme des arguments de la commande.
La chaîne {}est remplacée par le nom de fichier actuel en cours de traitement.
using +exécutera le moins de commandes possible (car les arguments sont combinés ensemble). C'est très similaire au fonctionnement de la xargscommande, il utilisera donc autant d'arguments par commande que possible pour éviter de dépasser la limite maximale d'arguments par ligne.
Il y a une différence et une différence majeure. Voir la réponse de user1116056
Jahid
24
Étant donné que la commande find obtient en dessous de trois fichiers:
fileA
fileB
fileC
Si vous utilisez -execun signe plus ( +),
find . -type f -exec chmod 775 {} +
ce sera:
chmod 775 fileA fileB fileC
La ligne de commande est créée en ajoutant à la fin chaque nom de fichier correspondant, de la même manière que pour la xargsconstruction de ses lignes de commande. Le nombre total d'appels de la commande ( chmod, dans ce cas) sera bien inférieur au nombre de fichiers correspondants.
-exec command {} + Cette variante de l'action -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est créée en ajoutant à la fin chaque nom de fichier sélectionné; le nombre total d'appels de la commande sera bien inférieur au nombre de fichiers correspondants. La ligne de commande est construite de la même manière que xargs construit ses lignes de commande. Une seule instance de '{}' est autorisée dans la commande. La commande est exécutée dans le répertoire de départ.
man find(1)
détail, facilement accessible à tous. Ne sois pas paresseux.man exec
!{} +
utilisation auparavant. J'utilise normalement des xargs pour cela (et souventfind ... -print0 | xargs -0 ...
)Réponses:
L'utilisation de
;
(point-virgule) ou+
(signe plus) est obligatoire pour terminer les commandes shell appelées par-exec
/execdir
.La différence entre
;
(point-virgule) ou+
(signe plus) réside dans la façon dont les arguments sont passés dans le paramètre-exec
/ de find-execdir
. Par exemple:l'utilisation
;
exécutera plusieurs commandes (séparément pour chaque argument),Exemple:
using
+
exécutera le moins de commandes possible (car les arguments sont combinés ensemble). C'est très similaire au fonctionnement de laxargs
commande, il utilisera donc autant d'arguments par commande que possible pour éviter de dépasser la limite maximale d'arguments par ligne.Exemple:
Voir également:
man find
la source
Étant donné que la commande find obtient en dessous de trois fichiers:
Si vous utilisez
-exec
un signe plus (+
),ce sera:
La ligne de commande est créée en ajoutant à la fin chaque nom de fichier correspondant, de la même manière que pour la
xargs
construction de ses lignes de commande. Le nombre total d'appels de la commande (chmod
, dans ce cas) sera bien inférieur au nombre de fichiers correspondants.Si vous utilisez
-exec
un point-virgule (;
),ce sera:
la source
Selon
man find
:la source