2011-02-28 57 views
0

我得到的结果使用查找具有'〜'和.swp等的文件名。所以我做了以下,但有没有更好的方法来做到这一点? '.*.js' -iname '*.js'部分感觉“冗余”。更好的方法来限制unix命令查找文件名

$ 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"); 
+1

你的'。*。js'参数是多余的,它被解释为一个到你当前位置的相对路径名(在查找中它不被用作模式),正如你所看到的,导致find打印一个错误输出中的第一行) – sinelaw 2011-02-28 18:22:34

+0

'grep'模式两端的'。*'也是多余的。你可以简单地忽略它们。 'grep -n“loginError” – 2011-02-28 18:27:11

回答

2

尝试使用

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

这将只查找 'JS' 扩展名的文件,并没有〜结束或.SWP

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

+0

无用的xargs – 2011-03-12 19:05:01

1

要做到这一切在一个命令没有xargs你可以这样做这样

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

在/ dev/null的一块是让grep的认为这是搜索多个文件,然后它会输出文件名正确,否则刚刚打印出来的行数不告诉你哪些文件是在

+0

另一种打印文件名的方式是'find。 -name“* .js”-exec grep -n“loginError”{} \; -print' - 我也从grep中移除了'。*',它只是感染着色的东西(模式/整条线)。 – 2011-03-12 19:04:28