Ubuntu grep, find etc :“Permission denied”및“No such file or directory”출력


17

내가 사용하는 경우 grepfind, 나는 항상 "사용 권한이 거부되었습니다"와 "해당 파일 또는 디렉터리"통지에 의해 짜증이 같은 :

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory

이를 피하고 관련 데이터, 즉 내가 실제로 찾고있는 것만 볼 수 있도록하려면 어떻게해야합니까?


답변:


24

grep을 사용하면 @ortang이 말한 것과 거의 비슷한 -s 플래그를 지정할 수 있습니다

-s, --no-messages 존재하지 않거나 읽을 수없는 파일에 대한 오류 메시지를 표시하지 않습니다. 이식성 참고 사항 : GNU grep과 달리 7th Edition Unix grep은 -q가없고 -s 옵션이 GNU grep의 -q 옵션처럼 동작하기 때문에 POSIX를 준수하지 않았습니다. USG 스타일 grep에는 -q가 없지만 -s 옵션은 GNU grep처럼 동작했습니다. 이식 가능한 쉘 스크립트는 -q와 -s를 모두 피해야하며 대신 표준 및 오류 출력을 / dev / null로 리디렉션해야합니다.

내가 아는 한 @ortangs의 답변이 가장 좋습니다. 같은

find / -name "myfile" -type f -print 2>/dev/null


6

리디렉션 시도 stderr/dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

strerrto /dev/null(aka black hole) 를 리디렉션하는 것은 권한 거부 오류를 억제하는 좋은 방법입니다.

그러나이 상처는 permission denied메시지를 억제 할 뿐만 아니라 모든 오류 메시지를 억제 합니다.

이외의 오류 메시지를 유지 permission denied하려면 다음과 같이 할 수 있습니다.

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log

당신이 그것들을 유지하고 싶지 않다면 다음은 괜찮을 것입니다-

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

1
이미 / dev / null로 경로 재 지정된 것은 grep 할 수 없습니다.
choroba

@choroba 답변을 수정했습니다. 첫 번째 제안 2>&1대신 쓰는 것 2> /dev/null.
jaypal 싱

예, 먼저 리디렉션 stderr해야 stout합니다.
ortang

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

sudo명령을 사용하여 관리 권한을 갖도록 명령을 높이십시오.


0

grep -v 앞에 "| &"를 사용하면 (예 :

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.