2017-01-03 85 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。您是否收到错误消息或空的结果? –

相关问题