web-dev-qa-db-fra.com

Pourquoi la barre oblique inverse et le point-virgule sont-ils requis avec l'option -exec de la commande find?

J'ai commencé à combiner différentes commandes dans le terminal Linux. Je me demande pourquoi la barre oblique inverse et le point-virgule sont requis pour une commande telle que:

find ./ -name 'blabla' -exec cp {} ./test \;

quand une simple commande cp est simplement:

cp randomfile ./test

sans le \;

Doivent-ils indiquer clairement la fin d'une commande, ou est-ce simplement requis dans la documentation? Quel est le principe sous-jacent?

Je vous remercie!

55
wesk

La barre oblique inverse avant le point-virgule est utilisée, car ; est l'un des opérateurs de liste (ou &&, ||) pour séparer les commandes Shell. Par exemple:

command1; command2

L'utilitaire find utilise ; ou + pour terminer les commandes Shell invoquées par -exec.

Donc, pour éviter les caractères Shell spéciaux de l'interprétation, ils doivent être échappés avec une barre oblique inverse pour supprimer toute signification spéciale pour la lecture de caractère suivante et pour la continuation de la ligne.

Par conséquent, l'exemple de syntaxe suivant est autorisé pour la commande find:

find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +

Voir également:

42
kenorb

de "l'homme trouve":

Tous les arguments suivants à rechercher sont considérés comme des arguments de la commande jusqu'à ce qu'un argument composé de ';' est rencontré.

find a besoin de savoir quand les arguments de exec sont terminés. Il est naturel de terminer une commande Shell avec; car le Shell utilise également ce caractère. Pour la même raison, un tel caractère doit être échappé lorsqu'il est inséré à travers le Shell.

49
Emanuele Paolini