2011-10-04 43 views
13

我在bash,我不想輸入所有的時間很長的命令,所以我把一個別名在我的.profile使用中發現-exec別名

alias foo='...' 

現在我想執行使用此別名找到-exec

find . -exec foo '{}' \; 

卻發現找不到FOO:

發現:FOO:沒有這樣的文件或目錄

是否可以在find中使用別名?

回答

7

不,找不到你的別名。別名不像環境變量,因爲它們不被子進程「繼承」。

您可以使用相同的命令創建一個shell腳本,設置+ x權限並將其放在您的路徑中。這將與find一起工作。

0

find命令中使用別名是不可能的(或難以/容易出錯)。 更簡單的方法,以實現所期望的結果是把別名的內容在一個shell腳本和運行的shell:

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

sed命令刪除前導alias foo='並取代通過"[email protected]"尾隨'其中將包含參數傳遞給腳本。

0

我使用ll普遍知道在這個例子中的別名,但你可以使用你的別名,而不是,只需更換ll與您的別名(foo)以下行,它應該工作:

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

的情況下, :

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

注意它假定你的別名是引用使用以下語法:

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

find本身並不知道有關別名的任何信息,但是你的shell卻不知道。如果您使用bash(我認爲4.0添加了此功能)的最新版本,則可以使用find . -exec ${BASH_ALIASES[foo]} {} \;在該位置的命令行中插入別名的文字內容。

0

我遇到了同樣的事情和幾乎實施skjaidev的解決方案。

我創建了一個叫做findVim.sh具有下列內容的bash腳本:

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

然後我加入了的.bashrc別名:

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

最後,我重裝的.bashrc與源在〜/ .bashrc。 $ fvim foo.groovy

故事太爽了很久沒有BRO閱讀:

反正長話短說我可以編輯任意腳本以稍快的文件。

0

您可以改用該變量。

因此,而不是:

alias foo="echo test" 

使用:

foo="echo test" 

然後通過命令取代或eval執行它,例如:

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

或:

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

這裏是一個被發現的所有非二進制文件真實的例子:

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

呼叫處理髮現的結果時,別名的另一種方法是使用類似this answer

所以下面應該工作:

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