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

  • Il est décrit dans man find(1) avec beaucoup de détails, facile à trouver par nimporte qui. Ne ' ne soyez pas paresseux.
  • Merci cher Miroslav, jai cherché dans man exec!
  • Ah, je navais jamais rencontré lutilisation de {} + auparavant. Jutilise normalement xargs pour cela (et souvent find ... -print0 | xargs -0 ...)

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 commande xargs, 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:

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *