2009-11-25 75 views
4

如何將以下命令轉換爲bash別名?Bash別名查詢

find . -name '*.php' | xargs grep --color -n 'search term' 

我在哪裏可以指定文件擴展名和「搜索詞」顯然是搜索詞:)

所以我想要做的是:

searchFiles 'php' 'search term' 

如何通過輸入到別名?我應該創建一個bash腳本,並將別名指向腳本嗎?

回答

6

如何使用函數?添加到您的.bashrc:

function searchFiles() { 
     find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2" 
} 

,然後用它喜歡:

$ searchFiles的C包含

+0

PERFECTO - 感謝隊友 –

+0

由於**克里斯·約翰森**狀態,你應該使用'-print0'和'-0 ' –

+0

正在更新答案... – Gonzalo

4

您可以使用別名,但使用功能,如貢薩洛所示,理智的事情要做。

alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ - 

無論是功能或別名,我建議使用-print0找到-0xargs的。這提供了更強大的文件名處理(通常是文件名中的空格)。

+1

+1 excellent .... –

1

雖然一個函數可以工作,但它不會被其他程序和腳本調用(沒有太多痛苦)。 (別名將有同樣的問題。)一個單獨的腳本將是我的選擇,因爲它聽起來像你想直接調用它:(與你有什麼無需查找)

#!/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" . 

如果這隻用在另一個腳本中而不是直接使用,那麼函數會更容易。

+0

您可以「導出」一個函數,使其可用於其他腳本。如果有大量文件,可以使用'find'和'xargs'。我沒有看到腳本中的任何特定的Bash。我認爲Bourne shell會非常滿意。 –

+0

是的,這是可能的,但對於不熟悉的人來說,掌握執行腳本並不容易。你爲什麼認爲find + xargs會更好? Re sh,我只是指出他不必擔心「bash vs sh」(可以是PITA),只是因爲他正在編寫一個單獨的腳本---只是寫一個bash腳本。 – 2009-11-26 04:27:23

+0

我同意@Roger。假設你有你自己的私人「〜/ bin」目錄在你的路徑中,以保持它(你做什麼,不是嗎?:),一個獨立腳本總是更靈活和強大的你想使用的小命令既可以直接在cli中,也可以在其他腳本中使用。一個小的sript目錄比單個文件充滿無關的功能更容易處理,恕我直言。 –

1

殼牌功能不錯,但你也可以看看ack。它處理特定的文件搜索,用顏色編碼,讓您的例子,簡直是

ack --php somepattern