5

我正在尝试将 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]

我该如何解决这个问题?

4

2 回答 2

7

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

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

你还需要引用你的一些论点。

f '*.php' function

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

于 2012-05-22T23:20:35.160 回答
4

扩展丹尼斯威廉姆森的解决方案:

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

使用xargs而不是-exec使您免于为每个 grep 生成一个新进程...如果您有很多文件,则开销可能会有所不同。

于 2012-05-23T00:00:57.677 回答