Je souhaite connaître la signification de {} +
dans le exec
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 {} \;
Commentaires
Réponse
Lutilisation 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) est la manière dont les arguments sont passés dans find « s -exec
/ -execdir
Par exemple:
-
en utilisant
;
exécutera plusieurs commandes (séparément pour chaque argument),Exemple:
$ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
Tous les arguments suivants de
find
sont considérés comme des arguments de la commande.La chaîne
{}
est remplacé par le nom du fichier actuel e en cours de traitement. -
en utilisant
+
exécutera le moins de commandes possible (car les arguments sont combinés ensemble). Cest très similaire au fonctionnement de la commandexargs
, donc elle utilisera autant darguments par commande que possible pour éviter de dépasser la limite maximale darguments par ligne.Exemple:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
La ligne de commande est construite en ajoutant chaque nom de fichier sélectionné à la fin.
Une seule instance de
{}
est autorisée dans la commande.
Voir aussi:
-
man find
- Utilisation du point-virgule (;) vs plus (+) avec exec dans find à SO
- Commande unix simple, quels sont les {} et \; pour chez SO
Commentaires
- Il y a une différence et une différence majeure. Voir la réponse de user1116056 '
Réponse
Étant donné que le la commande find obtient en dessous de trois fichiers:
fileA fileB fileC
Si vous utilisez -exec
avec un plus (+
) signe,
find . -type f -exec chmod 775 {} +
ce sera:
chmod 775 fileA fileB fileC
La ligne de commande est construite en ajoutant chaque nom de fichier correspondant à la fin, ce qui est de la même manière que xargs
construit ses lignes de commande. Le nombre total dappels de la commande (chmod
, dans ce cas) sera bien inférieur au nombre de fichiers correspondants.
Si vous utilisez -exec
avec un point-virgule (;
),
find . -type f -exec chmod 775 {} \;
ce sera:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Réponse
Comme pour man find
:
-exec commande {} + Ceci la variante de laction -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est construite en ajoutant chaque nom de fichier sélectionné à la fin; le nombre total dappels de la commande sera bien inférieur au nombre de fichiers correspondants. La ligne de commande est construite à peu près 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)
avec beaucoup de détails, facile à trouver par nimporte qui. Ne ' ne soyez pas paresseux.man exec
!{} +
auparavant. Jutilise normalement xargs pour cela (et souventfind ... -print0 | xargs -0 ...
)