Qu'est-ce que
{} \;
chaîne signifie bash?
Je l'ai vu plusieurs fois, par exemple, pour trouver et supprimer tous les fichiers par leur nom, il faut les exécuter
find . -name "FILE-TO-FIND" -exec rm -rf {} \;
Que fait cette chaîne?
{}
et ;
ont tous deux une signification particulière dans bash
, mais dans le contexte de find
, c’est find
qui interprète ces deux éléments (en fait, nous voulons find
pour interpréter ces deux).
Tout d'abord, -exec
est une action de find
. {}
et ;
sont des paramètres spéciaux pour le prédicat -exec
de find
.
La syntaxe de l'action -exec
est la suivante:
-exec command ;
ou
-exec command {} +
Nous devons donc empêcher {}
et ;
d'être interprétés au préalable par Shell.
Dans le contexte de find .... -exec
:
{}
indique (contient) le ou les résultats de l'expression find
c'est-à-dire find . -name "FILE-TO-FIND"
dans ce cas. Notez que les accolades vides {}
n’ont aucune signification particulière pour Shell, nous pouvons donc nous échapper sans nous échapper {}
Comme bash
traite ;
comme fin d'une commande, nous devons y échapper avec \
c'est-à-dire \;
afin qu'il puisse être analysé par -exec
et non par bash
lui-même.