Saya bertanya-tanya apakah ada cara untuk menampilkan semacam info kemajuan saat mencari file di linux menggunakan find
. Saya sering menemukan diri saya mencari file pada disk besar dan beberapa jenis indikator kemajuan akan sangat membantu, seperti bar atau setidaknya direktori saat ini "menemukan" pencarian. Apakah ada skrip yang melakukan itu, atau memang find
mendukung beberapa kait ?
24
Jawaban:
dengan trik ini Anda dapat melihat folder saat ini - tetapi tidak ada bilah kemajuan - maaf.
sumber
Utilitas kecil yang disebut pv (penampil pipa) dapat membantu. Dari ringkasan fantastis oleh Peteris Krumins:
Pipe viewer adalah alat berbasis terminal untuk memantau kemajuan data melalui pipa.
Anda dapat menggunakan pv dalam beberapa cara. Ketika bermain-main di sini, saya meletakkannya segera setelah pipa untuk memantau kemajuan output yang dihasilkan oleh find (harus melewati stdin ke stdout tanpa tersentuh)
yang akan menampilkan output sedikit seperti ini:
(Saya mengarahkan stdout ke / dev / null sehingga saya bisa melihat progress bar beraksi tanpa output terbang. Ini mungkin bukan maksud Anda dengan find, jadi sesuaikan dengan itu)
Jujur saya tidak yakin seberapa baik ini bekerja di alam liar. Untuk temuan "mahal" seperti yang ada di atas (melintasi dari root), tampaknya berfungsi cukup baik. Untuk perintah yang lebih sederhana di simpul yang lebih dalam di pohon direktori, pv gagal total. Perintah-perintah ini segera mengembalikan hasil, jadi bar kemajuan mungkin diperdebatkan di sini.
Bagaimanapun, mainkan dan lihat apakah ini bekerja sama sekali untuk apa yang Anda butuhkan. Makanan untuk dipikirkan, setidaknya.
sumber
find
, maupunpv
tahu berapa lama pencarian akan berlangsung, sehingga mereka tidak dapat menghitung persentase. Yang bisa kita lihat dipv
output adalah waktu sejak pencarian dimulai.yes | pv > /dev/null
amatiSaya mencari ini hari ini dan tiba di sini melalui Google. Saya telah menemukan berjalan lama berjalan pada OS X dan ternyata,
watch
tidak ada di sana. Jadi, inilah solusi lain:lsof -Fn -a -c find -d cwd +r 10
lsof
= daftar file yang terbuka-Fn
= cukup tunjukkan nama file / direktori (diawali dengan karakter 'n', lewati ini jika Anda lebih sukalsof
output penuh-a
= beri tahulsof
untuk menunjukkan hanya baris yang cocok dengan semua kriteria (secara default ini menunjukkan baris yang cocok dengan kriteria apa pun )-c find
= tampilkan file / direktori yang dibuka oleh proses bernamafind
(sebenarnya, proses yang namanya dimulaifind
, tetapi case-sensitive jadiFinder
tidak akan muncul)-d cwd
= tunjukkan baris dengan FD (diarsipkan) cwd (direktori kerja saat ini)+r 10
= tampilkan keluaran setiap 10 detik sampai tidak ada file terbuka ditemukan (cari selesai)Ini akan menunjukkan direktori
find
sedang memproses setiap 10 detik, sehingga harus memberikan gambaran apakahfind
masih berfungsi dan sejauh mana kemajuannya.sumber
Ada contoh pencarian paralel dengan
find
diman find
. Dengan menggunakannya, Anda dapat melakukan beberapa pemeriksaan untuk setiap item, melakukan beberapa tindakan tergantung pada kondisi mana yang berfungsi. Cek pertama mungkin, misalnya, sederhana-print
, sehingga semua nama dicetak ke stdout. Pemeriksaan kedua akan melakukan apa yang Anda inginkan. Sesuatu seperti:find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
Jika pemeriksaan kedua juga menampilkan nama file, Anda dapat mengarahkan ulang salah satu dari mereka ke stderr menggunakan
-fprint /dev/stderr
.sumber
AFAIK, tidak, dan mengimplementasikannya akan menjadi tidak penting.
... Hmm. Mungkin sebuah skrip berjalan
find <target dir> -type d
terlebih dahulu, menyimpan daftar dan kemudian mengulang setiap dir sebelum menjalankanfind <list item> -maxdepth 1 <rest of find parameters>
dalam untuk loop.Perhatikan bahwa Anda melakukan perdagangan / signifikan / kehilangan kinerja dengan imbalan bisa melihat secara samar apa yang dilakukannya.
sumber
Ini adalah daftar file saat ini dibuka oleh find , jadi itu sama dengan apa yang ditemukan 'sekarang'.
Its ringan sebagai alamat permintaan hanya dari descriptos file yang digunakan oleh menemukan setiap detik dan tidak interfer di menemukan sendiri. Anda juga dapat melakukannya dengan program apa pun yang Anda inginkan.
The
grep -v /dev/
adalah untuk menyembunyikan file STDOUT, STDIN dan STDERR bahwa adalah file yang digunakan untuk menerima dan mencetak data pada konsol Anda.sumber