2017-07-19 29 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