2009-11-25 76 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