0

我使用带有“~”和 .swp 等文件名的 find 来获得结果。所以我做了以下事情,但有没有更好的方法来做到这一点?该'.*.js' -iname '*.js'部分感觉“多余”。

$ find ./ '.*.js' -iname '*.js' -print0 | xargs -0 grep -n ".*loginError.*"
find: `.*.js': No such file or directory
./js/signin.js:252:                               foo.loginError();
./js/signin.js:339:foo.loginError = function() {
./js/signin.js:340:    foo.log("ui.loginError");
4

2 回答 2

2

尝试使用

find . -name \*.js -print0 | xargs -0 grep -n ".*loginError.*"

这将只找到扩展名为“js”且不以 ~ 或 .swp 结尾的文件

编辑:添加了 '0' -print0 (编辑需要 6 个字符,所以我添加了这个;呃!)

于 2011-02-28T18:18:06.947 回答
1

要在没有 xargs 的情况下在一个命令中完成所有操作,您可以这样做

find . -name "*.js" -exec grep -n ".*loginError.*" /dev/null {} \;

/dev/null 部分是让 grep 认为它正在搜索多个文件,然后它会正确输出文件名,否则它只会打印出行号而不告诉你它在哪个文件中

于 2011-02-28T18:25:11.250 回答