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

これにより、グロブの拡張が延期されfind、シェルではなく実行されます。

于 2012-05-22T23:20:35.160 に答える
4

デニスウィリアムソンのソリューションを拡張する:

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

xargsgrepごとに新しいプロセスを生成するのを節約するのではなく使用-execする...ファイルがたくさんある場合は、オーバーヘッドが違いを生む可能性があります。

于 2012-05-23T00:00:57.677 に答える