Commande unix simple, qu'est-ce que {} et \; pour
Question
Avec cet ensemble de commandes, que sont les {} et \; caractères pour?
find . -name '*.clj' -exec grep -r resources {} \;
La solution
Voir la recherche de l'homme . (en particulier la partie sur -exec
)
Lorsque vous utilisez -exec
pour exécuter une commande sur chacun des fichiers trouvés, le {}
est remplacé par le nom de chaque fichier trouvé et la commande est arrêtée. par \;
Dans votre exemple, tous les fichiers situés dans le répertoire actuel (.
), correspondant au nom *. clj
auront la commande grep -r resources
exécuté sur eux (pour trouver la chaîne ressources
si elle existe dans chacun de ces fichiers).
C'est en fait quelque peu redondant, car -r
est destiné à la recherche récursive de sous-répertoires, et c'est ce que find
fait déjà.
Autres conseils
Dans find, le paramètre -exec récupère le reste des paramètres jusqu'à la fin; (point-virgule) qui doit être échappé, d’où le \ ;. Dans cette plage, {} est remplacé par le nom de fichier en cours d'inspection.
Considérez cette commande alternative que je trouve plus facile à comprendre:
find . -name *.clj | xargs grep -r resources
La chaîne de caractères " {} " sera remplacé par le fichier en cours de traitement. Le point-virgule d'échappement met fin à l'argument de commande pour l'option -exec.
La chaîne {}
dans find
est remplacée par le chemin du fichier en cours.
Le point-virgule est utilisé pour mettre fin à la commande shell invoquée par l'utilitaire find
.
Il doit être échappé ou cité pour ne pas être interprété par le shell, car ;
est l'un des caractères spéciaux utilisés par le shell (opérateurs de liste).