หลีกเลี่ยงการอนุญาตปฏิเสธสแปมเมื่อใช้คำสั่งค้นหา


21

ฉันมักจะพยายามค้นหาไฟล์ที่มีไวยากรณ์ต่อไปนี้:

find . -name "filetofind"

อย่างไรก็ตามมันมักจะส่งผลให้แถวหรือการรายงานข้อผิดพลาดจำนวนมาก (ปฏิเสธสิทธิ์) เกี่ยวกับโฟลเดอร์ที่ได้รับอนุญาตถูกปฏิเสธ มีวิธีอื่นในการหลีกเลี่ยงสแปมนี้มากกว่าการใช้ sudo หรือ grepping ขั้นสูงจากข้อผิดพลาดของเอาต์พุตหรือไม่



คำตอบ:


27

ลอง

find . -name "filetofind" 2>/dev/null

การดำเนินการนี้จะเปลี่ยนเส้นทางstderrสตรีมเอาต์พุตซึ่งใช้เพื่อรายงานข้อผิดพลาดทั้งหมดรวมถึง "การเข้าถึงที่ถูกปฏิเสธ" ไปยังอุปกรณ์ null


ขอบคุณทำงานเหมือนมีเสน่ห์ :) ฉันคิดว่าไม่มีวิธีง่ายๆที่จะทำให้เป็นตัวเลือกเริ่มต้นโดยไม่ต้องสร้างนามแฝงทำแบบเดียวกัน
user40167

ไม่นี่คือการออกแบบของเชลล์
whitequark

9

คุณยังสามารถใช้-permและเพรดิเคต-pruneเพื่อหลีกเลี่ยงการลดระดับลงในไดเรกทอรีที่อ่านไม่ได้ (ดูเพิ่มเติมฉันจะลบคำสั่งพิมพ์ "สิทธิ์ปฏิเสธ" ออกจากโปรแกรมค้นหาได้อย่างไร - Unix & Linux Stack Exchange ):

find . -type d ! -perm -g+r,u+r,o+r -prune -o -name "filetofind" -print

3

หากคุณต้องการดูข้อผิดพลาดอื่น ๆ และคุณไม่มีไฟล์ชื่อ "การอนุญาตที่ถูกปฏิเสธ" นี่จะทำงานได้ดีขึ้น

find . -name "filetofind" 2>&1 | grep -v 'permission denied' 

การเปลี่ยนเส้นทางเอาต์พุตไปยัง grep ด้วยอ็อพชัน inversion

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.