Je veux connaître la signification de {} +
dans la exec
commande 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 {} \;
Je veux connaître la signification de {} +
dans la exec
commande 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 {} \;
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:
$ 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
find
sont 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 xargs
commande, il utilisera donc autant d'arguments par commande que possible pour éviter de dépasser la limite maximale d'arguments 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 créée en ajoutant à la fin chaque nom de fichier sélectionné.
Une seule instance de
{}
est autorisée dans la commande.
Voir également:
Étant donné que la commande find obtient en dessous de trois fichiers:
fileA
fileB
fileC
Si vous utilisez -exec
un 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 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 ( ;
),
find . -type f -exec chmod 775 {} \;
ce sera:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
Selon man find
:
-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.