¿Cómo puedo convertir el siguiente comando en un alias de bash?
find . -name "*.php" | xargs grep --color -n "search term"
Donde puedo especificar la extensión del archivo y el "término de búsqueda" es obviamente el término de búsqueda :)
Entonces, lo que quiero hacer es:
searchFiles "php" "search term"
¿Cómo paso la entrada al alias? ¿Debo simplemente crear un script bash y tener el alias apuntando al script?
Respuestas
6 para la respuesta № 1¿Qué hay de usar una función? Agregue esto a su .bashrc:
function searchFiles() {
find . -name *."$1" -print0 | xargs -0 grep --color -n "$2"
}
y luego usarlo como:
$ searchFiles c include
4 para la respuesta № 2
Podrías usar un alias, pero usar una función, como muestra Gonzalo, es lo más sensato que puedes hacer.
alias searchFiles=sh -c ""find . -name *."$1" -type f -print0 | xargs -0 grep --color -Hn "$2""" -
Si función o alias, recomiendo usar -print0
con encontrar y -0
con xargs. Esto proporciona un manejo de nombre de archivo más robusto (más comúnmente, espacios en nombres de archivo).
1 para la respuesta № 3
Mientras una función funciona, no podrá llamarse desdeotros programas y scripts (sin mucho dolor). (Un alias tendría el mismo problema.) Sería mi elección una secuencia de comandos separada, ya que parece que quieres invocarla directamente:
#!/bin/bash
# since you"re already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)
INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .
(No es necesario encontrar con lo que tienes)
Si esto solo se usara dentro de otra secuencia de comandos en lugar de hacerlo directamente, una función sería más fácil.
1 para la respuesta № 4
Las funciones de Shell son buenas, pero es posible que también desee echarle un vistazo a ack. Maneja la búsqueda específica de archivos, con codificación de colores, para que su ejemplo sea simplemente
ack --php somepattern