我正在尝试将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]
我该如何解决这个问题?
答案 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生成一个新进程...如果你有很多文件,那么开销就会有所不同。