2017-01-03 42 views
0

例如,我要查找當前目錄(排除./bin)一個名爲「Makefile」文件中的所有文件,作爲參數和grep「庫」,如下圖所示:Linux shell:如何給參數提供find命令的別名?

find . ! -path "./build" -name "*Makefile"|xargs grep library 

我不鍵入所有這些每一次,我只想做一個「別名」有兩個參數,如:

myfind "*Makefile" "library" 

myfind的查找參數爲fo「查找」命令,爲「名」,爲「grep的」命令的第二個參數,也我希望星號「*」可以作爲參數的一部分傳遞,而不用解析。

如何寫這樣的別名?

回答

2

使用功能:

myfind() { find . ! -path "./build" -name "$1"|xargs grep "$2"; } 
+0

將此添加到〜/ .bashrc非常好 – dormi330

1

你不能用別名做到這一點。你可以寫一個小腳本,例如

#!/bin/bash 
find . ! -path "./build" -name "$1"|xargs grep $2 

保存爲myfind某處你的路徑上,並確保刪除的別名。

+0

或一個小函數。 –

+0

爲什麼這樣更好? 「源」包含函數的文件是額外的工作。 – Michael

+0

將函數放在.bashrc中,並且在調用該函數時將不會有+1運行bash開銷+1讀取文件開銷。這是功能的目標。 –

1

您使用的標籤linux的,所以我假設你正在使用GNU grep的。 GNU grep(至少grep (GNU grep) 2.25)支持以下選項,這使您的任務變得非常簡單。讓我從grep --help舉:

-r, --recursive   like --directories=recurse 
--include=FILE_PATTERN search only files that match FILE_PATTERN 
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN 
--exclude-from=FILE skip files matching any file pattern from FILE 
--exclude-dir=PATTERN directories that match PATTERN will be skipped. 

所以,你的任務可以由accomplisehd:

grep -r --include=Makefile --exclude-dir=build library 

當然,你可以創建一個shell腳本或功能,以進一步簡化。

+0

謝謝,但它不適用於我的RHEL或ubuntu。 – Troskyvs

+0

@Troskkvs奇怪的是,我用這個與Ubuntu 16.04。您是否收到錯誤消息或空的結果? –

相關問題