2011-02-28 56 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