Ubuntu grep, ค้นหา ฯลฯ :“ การอนุญาตถูกปฏิเสธ” และ“ ไม่มีไฟล์หรือไดเรคทอรี” เอาท์พุท


17

เมื่อฉันใช้งานgrepหรือfindฉันมักจะรู้สึกรำคาญกับคำว่า "การอนุญาตที่ถูกปฏิเสธ" และ "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" บางอย่างเช่นนี้:

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 คุณสามารถระบุค่าสถานะ -s ซึ่งทำสิ่งที่ @ortang กล่าวไว้ค่อนข้างดี

-s, - no-messages ระงับข้อความแสดงข้อผิดพลาดเกี่ยวกับไฟล์ที่ไม่มีอยู่หรืออ่านไม่ได้ หมายเหตุการพกพา: แตกต่างจาก grep GNU, grep รุ่นที่ 7 ของ Unix ไม่สอดคล้องกับ POSIX เนื่องจากไม่มี -q และตัวเลือก -s ทำงานเหมือนกับตัวเลือก -q ของ GNU grep grep สไตล์ USG ยังขาด -q แต่ตัวเลือก -s นั้นทำงานเหมือนกับ greu GNU สคริปต์เชลล์แบบพกพาควรหลีกเลี่ยงทั้ง -q และ -s และควรเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดไปยัง / dev / null แทน

ด้วย find เท่าที่ฉันรู้ @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

การเปลี่ยนเส้นทางstrerrไปยัง/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
คุณไม่สามารถ grep สิ่งที่ถูกเปลี่ยนเส้นทางไปยัง / dev / null แล้ว
choroba

@choroba ได้แก้ไขคำตอบแล้ว หมายถึงการเขียน2>&1แทน2> /dev/nullคำแนะนำแรก
jaypal singh

ใช่คุณต้องเปลี่ยนเส้นทาง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.