Pencarian dengan locate
path yang ditemukan di sistem file.
Seringkali, Anda tahu apriori bahwa Anda hanya tertarik pada file saja, atau direktori saja.
Pencarian 'cari' sering menghasilkan banyak hasil. Akan bermanfaat jika hanya memasukkan salah satu jenis dalam hasil, karena membantu mempersingkat output.
Tetapi ada argumen yang lebih menarik untuk meninggalkan file atau direktori: karena daftar jalur hasil bisa ambigu - tidak hanya dalam teori.
Contoh di bawah ini adalah kasus dunia nyata, dan bukan tidak biasa:
$ locate --regex --basename "xfce4-keyboard-overlay$"
/usr/local/bin/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay
Ok, kami menemukan sesuatu! Tapi ... file, atau direktori?
$ file /usr/local/bin/xfce4-keyboard-overlay
/usr/local/bin/xfce4-keyboard-overlay: bash script
Jadi itu file ...
$ file /usr/local/share/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay: directory
sedangkan yang kedua tidak.
Ambiguitas ini membuat daftar panjang jalur sulit dibaca, jadi alangkah baiknya menyaring direktori, misalnya menggunakan opsi baris comman untuk locate
.
Apakah ada yang seperti ini? Bahkan jika filter untuk direktori terpisah dari loc?
Paling tidak, orang bisa menggunakan skrip untuk mengulang semua nama file untuk diperiksa - yang mungkin lambat.
while
pernyataan Anda?printf
data acak .locate
dan meningkatkan Andaread
seperti yang disarankan di sini transnum.blogspot.ie/2008/11/...sumber
/usr/local/share/xfce4-keyboard-overlay
dan setiap subdirektori daripadanya , dalam contoh Anda. Menambahkan-maxdepth 0
bantuan.locate --regex --basename "xfce4-keyboard-overlay$" | xargs -I % sh -c "test -d % && echo %"
xargs
denganfind
adalah ide yang bagus, saya telah mengeditnya untuk membuatnya kuat. Semoga kamu tidak keberatan.xargs
akan mengulangi perintah untuk setiap baris jika Anda menentukan-L 1
atau-i
parameter.Lihat disini
Memang, ini menendang shell baru untuk setiap file, tetapi memang memiliki manfaat baik dan kompak.
EDIT: Saya tidak begitu senang dengan jawaban itu karena itu menendang shell baru untuk setiap file. Ini seharusnya hanya memiliki dua proses:
Tentu saja akan lebih baik jika kita bisa menghindari menendang juru bahasa sama sekali, tetapi
xargs
tampaknya tidak bisa dipercaya dalam kemampuannya untuk mengaitkan perintah.sumber
/home/evil/$(reboot)/xfce4-keyboard-overlay
dan saya bodoh menjalankannya sebagairoot
).Dua sen saya:
Ini kurang lebih seperti G-Man melakukannya dikombinasikan dengan proses substitusi.
sumber
Bagaimana jika Anda bergabung
locate
denganfile
dangrep
...?sumber
file
untuk setiap jalur. Perhatikan bahwa seringkali ada banyak baris hasil untuk ditemukan. Tes saya saat ini sedang mencari "gnome", memberikan sekitar 73000 jalur untuk diuji.$f
itu adalah file,file
program akan membuka file itu dan membaca darinya . Ini sangat mahal ketika semua yang perlu Anda lakukan adalah astat()
. ... ... ... ... Juga, ini akan memberikan hasil yang salah untuk file yang berisi "direktori" dalam nama mereka (seperti "phone_directory"). ... ... ... ... ... (Juga,for f in `…`; do …
sintaksis tidak dapat menangani nama yang berisi spasi.)