Linux komutunu bul - ilerlemeyi göster


24

Linux kullanarak dosya ararken bir tür ilerleme bilgisi göstermenin bir yolu olup olmadığını merak ediyordum find. Sık sık kendimi büyük bir diskte dosya ararken buluyorum ve bir tür ilerleme göstergesi bir çubuk veya en azından şu anki dizin içinde bulunan "find" aramaları gibi çok yardımcı olabilir. Bunu yapan veya findbazı kancaları destekleyen herhangi bir komut dosyası var mı ?


cevaplar için teşekkürler, tüm çözümleri kontrol edeceğim ve hangisinin daha iyi olduğuna karar vereceğim. Bana kalsa, tüm cevapları kabul edildi olarak işaretlerdim.
Vlad Balmos

hangi arama ölçütlerini kullandığına bağlı olarak konum bulma, bulduklarından çok daha hızlıdır
B14D3

Yanıtlar:


28

Bu numara ile mevcut klasörü görebilirsiniz - fakat ilerleme çubuğu yok - üzgünüm.

 watch readlink -f /proc/$(pidof find)/cwd

çok havalı. Cwd'ye erişmek için süper kullanıcı ayrıcalıklarına ihtiyacınız olduğunu unutmayın. Teşekkürler!
Vlad Balmos

Mükemmel çalışıyor.
Jesse Glick,

8

Pv (boru görüntüleyici) adı verilen küçük bir yardımcı program yardımcı olabilir . Gönderen fantastik özet Peteris Krūmiņš tarafından:

Boru görüntüleyici, bir boru hattı yoluyla veri ilerlemesini izlemek için kullanılan terminal tabanlı bir araçtır.

Pv'yi çeşitli şekillerde kullanabilirsiniz. Buralarda oynarken, find tarafından üretilen çıkışın ilerlemesini izlemek için hemen bir borunun ardına koydum (stdout'a dokunulmadan stdin'i geçmeli)

find / -mtime -1h | pv > /dev/null

hangi çıkış böyle biraz gösterecektir:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(Stdout komutunu / dev / null konumuna yönlendirdim, böylece ilerleme çubuğunu çıktıyı uçurarak çalışırken görebilirsiniz. Bu muhtemelen bulma niyetiniz değil, buna göre uyarlayın)

Doğada bunun ne kadar iyi çalıştığından emin değilim. "Pahalı" bulgular yukarıdaki gibi (kökünden geçen) gibi bulursa, oldukça iyi çalıştığı ortaya çıktı. Dizin ağacındaki daha derin bir düğümdeki daha basit komutlar için pv perişan bir şekilde başarısız oldu. Bu komutlar derhal sonuç döndürüyor, bu yüzden bir ilerleme çubuğu muhtemelen burada toplanıyor.

Her halükarda, etrafta oynayın ve ihtiyacınız olan şey için bunun işe yarayıp yaramadığına bakın. En azından düşünce için yemek.


Bu ilerleme çubuğu ne gösterecekti? Ne arama findne pvkadar süreceğini bilmediklerinden yüzdesini hesaplayamazlar. pvÇıktıda tek görebildiğimiz , aramanın başlamasından bu yana geçen zamandır.
minaev

Doğru. Pv'nin dizin geçişinin ilerlemesini kontrol etmesine izin veren (yanlış olan) bir sihir olduğunu düşünmüştüm. Sabit bir oranda standart girdi verildiğinde, pv ilerleme çubuğunu sabit bir frekansta hareket ettirir. Deneyin yes | pv > /dev/nullgözlemlemek
tcdyl

1
Güzel bir yardımcı program için +1
Vlad Balmos

Yargılama ilerlemesi önemsiz değil. Sayfa yükleyen web tarayıcıları bile bunu yapamaz. Dosya içeriği için dosya boyutuna göre bölebilirsiniz, ancak Unix akışları için toplam veri miktarını genellikle bilmiyorsunuz ve bu araç sadece dosyalar için değil her türlü akış verileri için esnek olması gerekiyor.
Sridhar Sarnobat,

7

Bugün bunu aradım ve buraya Google üzerinden geldim. OS X üzerinde çalışan uzun süren bir keşif vardı ve görünüşe göre watchorada mevcut değil. Yani burada başka bir çözüm:

lsof -Fn -a -c find -d cwd +r 10

  • lsof = açık dosyaların listesi
  • -Fn= sadece dosya / dizinin ismini göster ('n' karakteriyle önceden eklenmiş, tam lsofçıktısını tercih ediyorsan bunu atla)
  • -a= lsofsadece tüm kriterlere uyan çizgiler göstermesini söyle (varsayılan olarak herhangi bir kriterle eşleşen çizgileri gösterir )
  • -c find= Şov dosyaları / adlandırılmış işlemle açılan dizinleri find(aslında, adını birlikte başlar süreç find, ama onun küçük harfe duyarlı böylece Findergörünmeyecektir)
  • -d cwd = FD (filedescriptor) cwd (mevcut çalışma dizini) olan satırları göster
  • +r 10 = açık dosya bulunamayana kadar her 10 saniyede bir çıktısını göster (bul tamamlandı)

Bu, dizinin findher 10 saniyede bir işlemekte olduğunu gösterecektir , bu yüzden findhala çalışıyorsa ve ne kadar ilerlediğine dair bir fikir vermelidir .


5

İle paralel aramalardan sonra bir örneği var findiçinde man find. Kullanarak, hangi koşulun işe yaradığına bağlı olarak birden fazla işlem gerçekleştirerek her öğe için birden fazla kontrol yapabilirsiniz. İlk kontrol, örneğin basit olabilir -print, bu yüzden tüm isimler stdout'a basılmıştır. İkinci kontrol ne istersen yapacak. Gibi bir şey:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

İkinci kontrolün de dosya isimleri göstermesi gerekiyorsa, onlardan birini stderr komutuna yönlendirebilirsiniz -fprint /dev/stderr.


Bunu test etmedim ama bence doğru yol.
Rolf

2

AFAIK, yapmıyor ve uygulamak önemsiz olacak.

... Hmm. Belki de find <target dir> -type dönce çalışan bir betik , listeyi kaydeder ve daha sonra find <list item> -maxdepth 1 <rest of find parameters>bir for döngüsünde çalıştırmadan önce her bir diziyi yankılar .

Ne yaptığını belli belirsiz görebilmeniz karşılığında bir / önemli / performans kaybı ile işlem yaptığınızı unutmayın.


1

Bu, bul ile açılan geçerli dosyaların bir listesidir , bu nedenle bulmanın 'şu anda' aradığı şeyle aynıdır .

Tarafından kullanılan dosya descriptos sadece sorgu adresi olarak Onun hafif bulmak her saniye ve INTERFER içinde yok bulabilirsiniz kendisini. Ayrıca istediğiniz herhangi bir programla yapabilirsiniz.

# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'

grep -v /dev/Gizlemek almak ve konsolda verileri yazdırmak için kullanılan dosyalardır STDOUT, STDIN ve STDERR, dosyaları etmektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.