更好的方法来限制unix命令查找文件名

时间:2011-02-28 18:14:14

标签: bash find xargs

我使用带有'〜'和.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");

2 个答案:

答案 0 :(得分:2)

尝试使用

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

这将只找到扩展名为'js'并且不以〜或.swp

结尾的文件

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

答案 1 :(得分:1)

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

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

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