2011-10-04 5 views
13

Ho un tempo molto lungo di comando in bash, che io non voglio di digitare tutto il tempo, così ho messo un alias nel mio .profileL'utilizzo di un alias a find -exec

alias foo='...' 

Ora voglio eseguire questo alias utilizzando trovare -exec

find . -exec foo '{}' \; 

ma trovare non riesce a trovare pippo:

ritrovamento: foo: No such file or directory

È possibile utilizzare un alias in find?

risposta

7

No, trovare non sa nulla dei tuoi alias. Gli alias non sono come le variabili di ambiente in quanto non sono "ereditati" dai processi figli.

È possibile creare uno script di shell con gli stessi comandi, impostare + x autorizzazioni e averlo sul percorso. Questo funzionerà con find.

0

Non è possibile (o difficile/soggetto ad errori) utilizzare alias nel comando find. Un modo più semplice per ottenere il risultato desiderato sta mettendo il contenuto della alias in uno shellscript ed eseguire che shellscript:

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

Il comando sed rimuove il leader alias foo=' e sostituisce il trascinamento ' da "[email protected]" che conterrà gli argomenti passato alla sceneggiatura.

0

Sto usando il ll comunemente conosciuto alias per questo esempio, ma è possibile utilizzare l'alias invece, basta sostituire ll nella riga seguente con il vostro alias (foo) e dovrebbe funzionare:

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

tuo caso :

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

Nota assume l'alias è citato utilizzando la seguente sintassi:

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

find stesso non sa nulla di alias, ma lo fa la tua shell. Se si utilizza una versione abbastanza recente di bash (penso che 4.0 abbia aggiunto questa funzione), è possibile utilizzare find . -exec ${BASH_ALIASES[foo]} {} \; per inserire il contenuto letterale dell'alias in quel punto nella riga di comando.

0

Mi sono imbattuto nella stessa cosa e ho praticamente implementato la soluzione di skjaidev.

ho creato uno script bash chiamato findVim.sh con il seguente contenuto:

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

Poi ho aggiunto il l'alias .bashrc come:

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

Infine, ho ricaricato .bashrc con fonte ~/.bashrc.

Comunque lunga storia breve che posso modificare lo script arbitrari file leggermente più veloce con: $ fvim foo.groovy

storia troppo freddo lungo non ha Bro leggere.

0

È possibile utilizzare invece la variabile.

Così, invece di:

alias foo="echo test" 

uso:

foo="echo test" 

eseguirlo sia dalla sostituzione di comando o eval, per esempio:

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

o:

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

Ecco esempio reale che sta trovando tutti i file non binari:

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

Un altro modo di chiamare un alias durante l'elaborazione dei risultati del ritrovamento è di usare qualcosa come this answer

quindi il seguente dovrebbe lavoro:

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