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

+0

또한'grep' 패턴의 양쪽 끝에'. * '가 중복됩니다. 단순히 생략 할 수 있습니다. 'grep -n "loginError"' –

답변

2

'의 JS'확장자를 가진 파일 만 찾을 것

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

를 사용하여 시도하고 ~ 끝나지 않는 또는

편집 .swp : -print0이 (편집 6을 필요로 추가 된 '0'을 문자 그래서 나는 이것을 추가하고있다!)

+0

xargs 쓸데없는 사용 –

1

xargs없이 모든 명령을 수행하려면 다음과 같이하십시오.

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

은/dev/null의 조각 그렙가 여러 파일을 검색 생각하는 것입니다 후 출력 파일 이름이 제대로, 그렇지 않으면 그냥

+0

파일 이름을 인쇄하는 또 다른 방법은'find입니다. -name "* .js"-exec grep -n "loginError"{} \; -print' - 또한 grep에서'. *'을 제거했습니다. grep은 색이있는 것을 감염시킵니다 (패턴/전체 줄). –