查找抛出路径必须位于脚本中的表达式之前

时间:2012-05-22 23:16:31

标签: linux bash shell find grep

我正在尝试将find和grep别名为一行,如下所示

alias f='find . -name $1 -type f -exec grep -i $2 '{}' \;'

我打算将其作为

运行
f *.php function

但是当我将它添加到.bash_profile并运行它时,我被

命中
[a@a ~]$ f ss s
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

别名不接受位置参数。你需要使用一个函数。

f () { find . -name "$1" -type f -exec grep -i "$2" '{}' \; ; }

你还需要引用一些论点。

f '*.php' function

这推迟了glob的扩展,以便find执行它而不是shell。

答案 1 :(得分:4)

扩展Dennis Williamson的解决方案:

f() { find . -name "$1" -type f -print0 | xargs -0 grep -i "$2"; }

使用xargs而不是-exec可以避免为每个grep生成一个新进程...如果你有很多文件,那么开销就会有所不同。