perintah find / grep tanpa mencari share yang dipasang

34

Ketika saya menggunakan perintah find, saya hampir selalu perlu mencari drive lokal. Tapi, saya hampir selalu memiliki share jaringan super besar dan ini termasuk dalam pencarian. Apakah ada cara mudah untuk mengecualikan mereka yang ada di perintah find, grep, dan perintah serupa lainnya? Contoh:

temukan / -nama .vimrc

Flotsam N. Jetsam
sumber

Jawaban:

46

Gunakan -fstype localopsi untuk menemukan:

find / -fstype local -name .vimrc

Jika Anda ingin mengecualikan hanya jalur tertentu, Anda dapat menggunakan -prune:

find / -name /path/to/ignore -prune -o -name .vimrc

Memperbarui:

The localpsuedo-fstype tersedia dalam versi menemukan yang datang dengan OS X, tetapi tidak dalam GNU find ( fstypes diakui oleh GNU find ).

Jika Anda menggunakan GNU find (seperti yang digunakan pada sebagian besar sistem linux), Anda sebaiknya menggunakan -mount:

find / -mount -name .vimrc
Doug Harris
sumber
apakah itu bekerja untuk grep juga?
Flotsam N. Jetsam
1
Saya tidak berpikir grep memiliki opsi seperti itu. Saya biasanya menggunakan findpipa grepseperti yang ditunjukkan dalam jawaban ini: superuser.com/questions/80033/… . Akhir-akhir ini, saya telah menggunakan ack( betterthangrep.com ) sebagai gantinya, tetapi acksepertinya tidak memiliki pilihan untuk mencari hanya drive lokal.
Doug Harris
Suntingan saya ditolak karena ini, jadi berikan komentar saja. Pada dasarnya contoh pertama salah, karena Anda perlu menambahkannya -pruneatau masih akan melintasi sistem file yang tidak diinginkan. Contoh kedua yang saya yakini dimaksudkan sebagai -pathpengganti -nameagar tidak mengabaikan jalannya. FWIW ... contoh terakhir tidak berfungsi, ia tetap di "filesystem saat ini" sehingga tidak melintasi yang lain.
rogerdpack
20

man find menunjukkan:

-xdev Jangan turun direktori di sistem file lain.

penguinjeff
sumber
2
-xdevsama dengan -mountFWIW ... :)
rogerdpack
0

Pertanyaan asli adalah menemukan pada disk lokal saja, jadi demi kelengkapan, inilah yang saya gunakan;

for PART in `awk '(!/^#/ && $6 != "0" || $3 == "xfs" ) { print $2 }' /etc/fstab 2>/dev/null`; do find $PART -xdev -name .vimrc -print 2>/dev/null; done

Selama fstab Anda diatur dengan benar, ia hanya akan mencari disk lokal; yaitu, cifs mounts harus memiliki flag akhir yang diatur ke 0. Saya menyertakan OR untuk sistem file xfs ketika kita mulai pergi ke RHEL7, mereka harus diatur ke 0 juga karena mereka tidak dimaksudkan untuk melakukan disk reorg setelah begitu banyak restart.

Semoga itu bisa membantu.

Shaun Saunders
sumber