Ubuntu grep, find etc :“Permission denied”및“No such file or directory”출력 내가 사용하는 경우 grep나 find,

내가 사용하는 경우 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

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



답변

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


답변

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

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

답변

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

답변

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

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


답변

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

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'

답변