2017-07-19 52 views
0

很多時候我需要從一個目錄和下面搜索所有具有特定類型的文件中的模式。例如,我需要問grep不要查看* .h,* .cpp或* .c以外的文件。但如果我輸入:需要組合grep和find的別名

grep -r pattern . 

它會查看所有文件。如果我輸入:

grep -r pattern *.c 

它會嘗試(在我的情況下,沒有文件夾)在當前文件夾中的* .c文件(在我的情況下,沒有文件),文件中的* .c文件夾。我想問它也查看所有文件夾,但只能查看給定類型的文件。我認爲grep不足以用​​於此目的。所以,我也可以通過查找來獲得幫助,例如:

grep pattern `find . -name '*c'` 

首先,讓我知道我是否正確地從尋找中獲得幫助。可以grep夠了嗎?其次,我喜歡寫一個別名像這樣使用bash下

mygrep pattern c 

被翻譯成相同的命令避免'和'使用和簡單。我想:

alias mygrep="grep $1 `find . -name '*$2'`" 

但它不工作,併發出錯誤:

grep: c: No such file or directory 

我試圖改變它,但我不能成功,一個成功的別名。

有什麼想法?

+1

只搜索特定的文件類型'grep -r --include ='* .c''pattern'' ..還有其他選項,像'--exclude'和' - -exclude-dir' ..在任何情況下,如回答,使用函數代替別名 – Sundeep

回答

3

這將能夠更好地完成爲function than an alias,並使用-exec代替的findpassing the outputgrep。該輸出將受到分詞和通配的影響,因此可能會產生令人驚訝的結果。而是嘗試:

mygrep() { 
    find . -name "*$2" -exec grep "$1" {} + 
} 
+0

哦。我應該在哪裏放置這個功能? – hamidi

+0

@hamidi你可以把它放在你的'.bash_profile'中,或者你可以把別名 –

+0

oh thx放在任何地方,它可以很好地工作。我可以保留grep的顏色嗎? – hamidi