Par exemple, je souhaite rechercher le répertoire actuel (exclure ./bin) pour tous les fichiers nommés "Makefile", en tant qu'argument et grep "bibliothèque", comme ci-dessous:
find . ! -path "./build" -name "*Makefile"|xargs grep library
Je ne veux pas tous les taper à chaque fois, je veux juste faire un "alias" avec 2 paramètres, comme:
myfind "*Makefile" "library"
Le paramètre find de myfind est fo. "find" commande en tant que "nom" le deuxième paramètre de la commande "grep", je souhaite également que l'astérisque "*" puisse être passé comme paramètre, sans être analysé.
Comment écrire un tel alias?
Réponses:
2 pour la réponse № 1Utilisez la fonction:
myfind() { find . ! -path "./build" -name "$1"|xargs grep "$2"; }
1 pour la réponse № 2
Vous ne pouvez pas le faire avec un alias. Vous pouvez écrire un petit script, par exemple.
#!/bin/bash
find . ! -path "./build" -name "$1"|xargs grep $2
Enregistrez-le sous myfind
quelque part sur votre chemin et assurez-vous de supprimer le pseudonyme.
1 pour la réponse № 3
Vous avez utilisé la balise linux, donc je suppose que vous utilisez GNU grep. Grep GNU (au moins grep (GNU grep) 2.25
) prend en charge les options suivantes, ce qui rend votre tâche très simple. Permettez-moi de citer grep --help
:
-r, --recursive like --directories=recurse
--include=FILE_PATTERN search only files that match FILE_PATTERN
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
Ainsi, votre tâche peut être accomplie en:
grep -r --include=Makefile --exclude-dir=build library
Bien sûr, vous pouvez créer un script ou une fonction shell pour simplifier davantage cela.