2011-10-04 13 views
13

tengo mucho comandos en bash, que no quiero que escribir todo el tiempo, por lo que poner un alias en mi .profileEl uso de un alias en hallazgo -exec

alias foo='...' 

Ahora quiero ejecutar este sobrenombre, usando encontrar -exec

find . -exec foo '{}' \; 

pero encuentra que no puede encontrar foo:

hallazgo: foo: no existe el fichero o directorio

¿Es posible usar un alias en find?

Respuesta

7

No, encuentra que no sabe nada sobre sus alias. Los alias no son como variables de entorno en el sentido de que no son "heredados" por procesos secundarios.

Puede crear un script de shell con los mismos comandos, establecer + x permisos y tenerlo en su ruta. Esto funcionará con find.

0

No es posible (o difícil/propenso a errores) utilizar alias en el comando find. Una forma más fácil de lograr el resultado deseado es poner el contenido del alias en un shellscript y correr que shellscript:

alias foo | sed "s/alias foo='//;s/'$/ \"\[email protected]\"/" > /tmp/foo 
find -exec bash /tmp/foo {} \; 

El comando sed elimina el principal alias foo=' y sustituye a la de salida ' por "[email protected]" el cual contendrá los argumentos pasó al guión.

0

estoy usando el ll comúnmente conocer el alias de este ejemplo, pero usted puede utilizar su alias en lugar, basta con sustituir ll en la siguiente línea con su alias (foo) y debería funcionar:

find . -exec `alias ll | cut -d"'" -f2` {} \; 

su caso :

find . -exec `alias foo | cut -d"'" -f2` {} \; 

Nota asume su alias es citado con la siguiente sintaxis:

alias foo='your-very-long-command' 
9

find mismo no sabe nada sobre los alias, pero su shell sí. Si está utilizando una versión reciente de bash (creo que 4.0 agregó esta característica), puede usar find . -exec ${BASH_ALIASES[foo]} {} \; para insertar el contenido literal del alias en ese punto de la línea de comando.

0

Me encontré con lo mismo y prácticamente implementé la solución de skjaidev.

he creado un script bash llamada findVim.sh con el siguiente contenido:

[ [email protected]:~ ]$ cat findVim.sh                          #!/bin/bash                                                                                                                                                                  
find . -iname $1 -exec vim '{}' \; 

Luego añade el alias .bashrc como:

[ [email protected]:~ ]$ cat ~/.bashrc | grep fvim                       
alias fvim='sh ~/findVim.sh' 

Por último, Recargué .bashrc con la fuente ~/.bashrc.

De todas formas larga historia corta que puedo editar archivos de secuencia de comandos arbitrarios con un poco más rápido: $ fvim foo.groovy

historia demasiado frío larga no BRO leer.

0

Puede usar la variable en su lugar.

Así que en lugar de:

alias foo="echo test" 

uso:

foo="echo test" 

luego ejecutarlo, ya sea por sustitución de comandos o eval, por ejemplo:

find . -type f -exec sh -c "eval $foo" \; 

o:

find . -type f -exec sh -c "echo `$foo`" \; 

Aquí es ejemplo real que está encontrando todos los archivos no binarios:

IS_BINARY='import sys; sys.exit(not b"\x00" in open(sys.argv[1], "rb").read())' 
find . -type f -exec bash -c "python -c '$IS_BINARY' {} || echo {}" \; 
1

Otra forma de llamar a un alias en el tratamiento de los resultados de hallazgo es usar algo como this answer

por lo que el siguiente debe trabajo:

alias ll="ls -al" 
find . -type d | while read folder; do ll $folder; done 
Cuestiones relacionadas