yaklaşık dizin boyutunu al (tüm dosyaları ve alt dizinleri özyinelemeli olarak)


10

Bir dizin için hızlı bir şekilde doğru bir boyut elde etmenin bir yolu var mı (özyinelemeli olarak tüm alt dizinleri dahil)? Alt dizinlerin boyutlarını istemiyorum, sadece raporlanan toplam boyutta özyinelemeli olarak dahil edilmeleri gerektiğini kastediyorum.

Bu başarısız olursa, yaklaşık bir boyut elde etmenin bir yolu mu? Ben dftüm dosya sistemi için hızlı bir yanıt üreten satırları boyunca bir şey düşünüyorum , ama bu sefer belirli bir dizin (ve onun alt dizinleri).

duBir dizin verildiğinde binlerce alt dizin içeren çözümlerin kullanılması zaman alabilir.


Kullanmak dubildiğim tek yöntem. Sorun, verilerin hiyerarşi boyunca yayılmasıdır, bu nedenle sayıları elde etmek için bir araç tarafından hesaplanması gerekir.
slm

Yanıtlar:


15

Bunun oldukça faydalı olduğunu düşünüyorum.

du -sm Directory

veya iç dizinlerin dökümü için

du -sm Directory/*

ve sonra bir sürü alt dizine sahipse

du -sm Directory/* | sort -n 

-M seçeneğini kullanmamın sebebi megabayt çıktı almamı sağlamak. Bunun görsel olarak karşılaştırmamın daha kolay olduğunu düşünüyorum (örneğin birimlerden oluşan bir karışım elde edemediğimde, örneğin 999 KB ve 1MB ile 999000MB ve 1000000MB'yi karşılaştırın), ek fayda çıktıyı sıralamaya geçirebilmenizdir.

Hepsini arka plana ve yönlendirme çıktısına koyun, birinin kullandığı yöntemi kullanmak zaman alacaktır, zaman alacak birçok dosyanın bir geçişidir.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Ters sıralamayı not edin, böylece büyük olanlar başlangıçta olur. Bunu her n dakikada bir cron'a ekleyin.

Sonra bir takma ad ducache ile, oldukça güncel bir dizin kullanımı var.

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian glenn jackman'ın cevabı hakkındaki yorumuma bakın
Marcus Junius Brutus

Kabul edildi, bu yüzden -m ve sıralama kullanıyorum
X Tian

3
Unutmayın shopt -s dotglob, aksi takdirde du -sm Directory/*gizli dosyaları / dizinleri saymazsınız.
Dmitry Grigoryev

@XTian üzgünüm ama bazı komutlar pls yardım edemedim .
Maveň ツ


5
du -sh "$dir"

"insan" biçimli çıktıdaki toplam boyutun bir özetini verecektir.


Bir alternatif aradığınız için dudenedim find, ama tamamen aynı:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

Teşekkürler, bunun farkındayım ama dudoğru bir sonuç verdiğinden çok uzun sürüyor. Hızlı n 'kirli yaklaşık bir cevap sağlayan bir araç / komut umuyordum.
Marcus Junius Brutus

Orada dfancak bütün dosya sistemi üzerinde çalışır.
glenn jackman

1

Cevabımı beğenmeyebilirsiniz, ancak istediğinizi yapmanın en iyi yolunun "du -s" yi arka planda düzenli olarak cron kullanarak çalıştırmak ve sonucu bir dosyada saklamak olduğunu düşünüyorum. Sonra yaklaşık bir değer istediğinizde, dosyadaki değeri kullanın. Du'yu ne sıklıkta yapacağınıza siz karar verirsiniz. Değeri elde etmenin daha hızlı bir yolunu göremiyorum. Du komutu yaptığı iş için etkilidir.

Bunu çok hızlı bir şekilde yapabilmenin diğer tek yolu, dizin için bir dosya sistemi oluşturmaktır, o zaman df size çok hızlı bir şekilde istediğiniz cevabı verecektir.

Dosya sisteminizdeki dizininiz dışındaki her şeyi bilmek daha hızlıysa, dosya sisteminiz için df'yi, dizininiz dışındaki her şey için du çalıştırabilir ve çıkarabilirsiniz.


0

İhtiyaçlarınıza tam olarak uymuyor (tek satır baskı değil), diğer çözümlerden daha kolay:

du -a -h | sort -hr | head -2

Bu komut size dizin ve alt dizinin boyutunu ve geçerli dizindeki en büyük dosyanın veya alt dizinin boyutunu verir.

Not: head -2Bir alt dizinin geçerli dizinin tüm yerini alması ve geçerli dizinden önce dinlenmesi durumundadır.

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.