Bulgu sonuçlarında “okunabilir” dosya boyutları nasıl görüntülenir?


11

Centos sunucumdaki tüm büyük dosyaları bulmaya çalışıyorum. Bunu yapmak için kullanıyorum:

find / -maxdepth 10 -size +100000 -ls

Ben değiştirmeyi denedim -lshiç -lshama izin verilmez.

Bu sonuçları insan tarafından okunabilen boyutlarda (k, M,… soneklerini kullanarak) nasıl gösterebilirim?


İnsan tarafından okunabilir tanımı nedir? Benim için insan yeterince okunabilir.
manatwork

İle fileyardımcı programı denemek gerekir find.
Ramesh

@manatwork kb, mb, gb
blarg

Yanıtlar:


10

findgibi karmaşık seçeneklere sahip değil ls. İsterseniz ls -h, aramanız gerekir ls.

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

-xdevDisk alanından endişe ediyorsanız işe yaramayacak diğer dosya sistemlerine tekrarlamadan kaçınma seçeneğini öneriyorum .

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

Kabuğunuz olarak zsh kullanırsanız find, kullanmak yerine glob niteleyicileri kullanabilirsiniz. Dosya boyutunu sınırlamak basittir: Larkasından bir boyut; Numara numaradan önce isteğe bağlı birime sahip olabilir. Maksimum derinliği umursamıyorsanız, **/alt dizinlere geri dönmek için kullanabilirsiniz . Maksimum derinliği önemsiyorsanız, zsh glob desenleri “en fazla n kez” ifade etmenin bir yolundan yoksun olduğundan daha zahmetlidir . Cihazlar arası özyinelemeyi önlemek için dglob niteleyicisini kullanın ; statLinux altındaki komutla ( stat -c %d /yalnızca sayıyı görüntülemek için) veya zsh'ın kendi statyerleşikiyle ( zmodload zsh/statyüklemek için çalıştırın ) görüntüleyebileceğiniz aygıt numarasını bulmanız gerekir .

ls -lh /**/*(L+M99d$(stat -c %d /))

4

Denediğiniz komut bana okunabilir. Ancak, aşağıdaki yardımcı programla dosya yardımcı programını kullanabilirsiniz.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

Bunu yapmanın başka bir yolu aşağıdaki komutu kullanmaktır.

du -BM / | sort -nr

Yukarıdaki komut size sıralanan dosya boyutundaki dosyaları verecektir.

7.5> coreutils kullanıyorsanız , dosyaları boyuta göre listelemek için aşağıdaki komutu verebilirsiniz.

du -ah / | grep -v "/$" | sort -h

Makinemde sort -hseçenek yoktu.

Yorumda belirttiğiniz gibi, insan tarafından okunabilir formatınız dosyanın kb , mb veya gb boyutunda olması gerektiğidir . Cevap olarak gönderdiğim ikinci komutla giderdim. Sistemimde kullandığımda elde ettiğim çıktı,

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

İkinci komutunuzda alt sınır belirlemenin bir yolu var mı? En büyük dosyalar üstte görünür ve kabuğun üstünden hızla kaybolur EDIT - Sadece r
blarg

> outputKomuta ekleyerek çıktıyı bir dosyaya yeniden yönlendirebilirsiniz . Ardından, dosyayı açabilir ve çıktıyı istediğiniz gibi görüntüleyebilirsiniz :)
Ramesh

Bu klasörleri de görüyorum, oysa ben sadece dosyadan
sonrayım

du -a --max-depth=10 / | sort -rnbulabileceğim yakınlık. Ancak, bu durumda boyutu KB, MB veya GB olarak göstermez.
Ramesh

1

Bence peşinde olduğun şey daha çok şuna benziyor.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-execEğer bir komut çalıştırmak için izin verir ve {}bulgunun sonucu ile ikame edilmektedir. Son olarak +komutun sonu olduğunu ve gerekli olduğunu söylemek olduğunu söylemek.


2
Aslında {}burada alıntı yapmak tamamen gereksizdir . Komuttaki tek tırnaklar kabuk içindir, ancak kabuk hiçbir zaman ls -lah <args...>komutu hiç görmeyecektir - görür {}, alıntılanması gerekmez. Bunu findgörür ls -lah {}ve seçeneği findgenişletir {}ve -execseçeneğin adıyla ima edildiği gibi , argümanlar üzerinde doğrudan findbir exec*sistem çağrısı kullanır , bu nedenle boşluklarla ilgili herhangi bir sorun olmayacaktır çünkü findkelime bölme yapmayacaktır dosya adlarında.
jw013

1
-aSeçeneği lsargümanlar dosyaları olduğundan ve dizinleri olması bekleniyor çünkü gereksizdir. GNU ls -dils, -lsseçenek için kullanım bulur , bu yüzden en yakın şekilde çoğaltmak için ls -dilsh.
jw013

man find , -exec kullanımının ilk örneği için aşağıdakileri verir : Dosyayı geçerli dizindeki veya altındaki her dosyada find . -type f -exec file '{}' \; çalıştırır . Parantezlerin kabuk komut dosyası noktalama işareti olarak yorumlanmasını önlemek için tek tırnak işaretleri içine alındığına dikkat edin. Noktalı virgül benzer şekilde bir ters eğik çizgi kullanılarak korunur, ancak bu durumda tek tırnaklar da kullanılmış olabilir.
Tim Hughes

1
Man sayfası basitçe gereksiz uyarıları savunuyor. Zarar vermez, ancak {}alıntılanması gereken herhangi bir kabuğun farkında değilim .
jw013
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.