จะแยกโฟลเดอร์ proc และ sys ออกจากการค้นหาด้วยคำสั่ง find ได้อย่างไร


10

ฉันต้องการรันสคริปต์ที่เลือกเส้นทางไดเรกทอรีแบบสุ่ม:

find / -type d | shuf -n1 

น่าเสียดายที่ฉันได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับข้อห้ามในการเข้าสู่บางไดเรกทอรี

ฉันจะแยกไดเรกทอรีออกจากการค้นหาด้วยการค้นหาได้อย่างไร

คำตอบ:


13

ในการยกเว้นเส้นทางเฉพาะบน Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

อีกวิธีหนึ่งคือการบอกfindไม่ให้เรียกเก็บเงินภายใต้ระบบไฟล์ที่แตกต่างกัน

find / -xdev -type d

นอกจากนี้คุณยังสามารถใช้ค้นหาเพื่อสืบค้นฐานข้อมูลชื่อไฟล์ (โดยปกติจะอัปเดตทุกคืนคุณสามารถอัปเดตด้วยตนเองโดยใช้updatedb) แทนระบบสด

locate '*' | shuf -n 1

ดีสั้นและลึกซึ้ง find / -xdev -type d ทำงานเอง แต่ find / -xdev -type d | shuf -n 1 แสดงข้อความผิดพลาด
Abdul Al Hazred

1
@AbdulAlHred คุณยังไม่ได้พูดว่ามีข้อความอะไร แต่ฉันเดาว่าพวกเขากำลังผิดพลาด "สิทธิ์ถูกปฏิเสธ" อย่างใดอย่างหนึ่งเรียกใช้คำสั่งเป็นรากหรือเพียงแค่ละเว้นข้อผิดพลาดโดยการส่งพวกเขาไปยัง find / -xdev -type d 2>/dev/nullstderr:
terdon

1
คุณทำไม่ได้ใช่ไหมfind / \( -path /sys -o -path /proc \) -prune -o -type dจะมีประโยชน์ถ้าคุณต้องการแยก dirs ที่ชอบ/devหรือ/tmpอื่น ๆ อีกมากมาย
BrainStone

6

ด้วย GNU คุณจะพบว่าคุณสามารถใช้ตัวเลือก regex เช่นนี้

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

นั่นเป็นวิธีที่ดีที่สุดโดยไกล (คุยโว: ดังนั้นจึงมีตัวเลือก gnu ที่ทำให้ค้นหา / ใช้งานได้บน gnu linux เช่นเดียวกับระบบปฏิบัติการอื่น ๆ ที่ไม่มีการใช้งานแบบ shitty / proc ;-)
Florian Heigl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.