Bagaimana cara mengecualikan folder proc dan sys dari pencarian dengan perintah find?

10

Saya ingin menjalankan skrip yang memilih jalur direktori acak:

find / -type d | shuf -n1 

Sayangnya saya mendapat pesan kesalahan tentang larangan memasukkan direktori tertentu.

Bagaimana saya bisa mengecualikan direktori dari pencarian dengan find?

Abdul Al Hazred
sumber

Jawaban:

13

Untuk mengecualikan jalur tertentu, di Linux:

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

Pendekatan lain adalah memberi tahu finduntuk tidak berulang di bawah sistem file yang berbeda.

find / -xdev -type d

Anda juga dapat menggunakan loc untuk meminta basis data nama file (biasanya diperbarui setiap malam, Anda juga dapat memperbaruinya menggunakan secara manual updatedb) alih-alih sistem live.

locate '*' | shuf -n 1
Gilles 'SANGAT berhenti menjadi jahat'
sumber
hebat, pendek dan berwawasan luas. find / -xdev -type d itu sendiri berfungsi, tetapi temukan / -xdev -type d | shuf -n 1 menampilkan pesan kesalahan.
Abdul Al Hazred
1
@AbdulAlHazred Anda belum mengatakan pesan apa, tapi saya rasa itu adalah kesalahan "izin ditolak". Entah menjalankan perintah sebagai root atau hanya mengabaikan kesalahan dengan mengirimkan mereka ke stderr: find / -xdev -type d 2>/dev/null.
terdon
1
Tidak bisakah Anda melakukannya find / \( -path /sys -o -path /proc \) -prune -o -type dAkan bermanfaat jika Anda ingin mengecualikan lebih banyak dirs seperti /devatau /tmp, dll.
BrainStone
6

dengan GNU temukan Anda juga dapat menggunakan opsi regex, misalnya seperti ini:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
jose
sumber
itu pendekatan terbaik, sejauh ini (kata-kata kasar: jadi ada opsi gnu yang membuat find / dapat digunakan di linux gnu seperti pada OS lain yang tidak memiliki implementasi shitty / proc ;-)
Florian Heigl