Özetlenen dizin boyutları ve alt dizinleri nasıl elde edilir?


307

Bir Linux dosya sisteminin her dizininin boyutunu almak istediğimi varsayalım. Kullandığımda ls -la, klasörlerin toplam boyutunu gerçekten göremiyorum.

Ben kullanırsanız dfHer monte dosya sisteminin boyutu olsun ama bu da bana yardımcı olmuyor. Ve duher bir alt dizinin boyutunu ve tüm dosya sisteminin özetini alıyorum.

Ancak, dosya sisteminin ROOT klasöründeki her bir dizinin yalnızca özetlenmiş boyutuna sahip olmak istiyorum. Bunu başarmak için herhangi bir komut var mı?


--totalBayrak benim için yararlı oldu. Örn du -sh --total applications/*. askubuntu.com/a/465436/48214
Ryan,

Yanıtlar:


433

Bu aradığınızı yapar:

du -sh /*

Bunun anlamı:

  • -s Her komut satırı argümanı için sadece toplam vermek.
  • -hMmegabayt ve Ggigabayt gibi insan tarafından okunabilen ekler için (isteğe bağlı).
  • /*sadece içindeki tüm dizinlere (ve dosyalara) genişler /.

    Not: nokta dosyaları dahil değildir; Bunları shopt -s dotglobda dahil etmek için koş .

Ayrıca yararlıdır, boyuta göre sıralama:

du -sh /* | sort -h

İşte:

  • -hsortİnsan tarafından okunabilen son ekleri doğru yorumlamasını sağlar .

8
Kök dizinde nokta dizinleri varsa, shopt -s dotglobonları sayıma dahil etmek için kullanabilirsiniz .
Philipp,

8
Çok basit ve size yerine hangi yolu yer çünkü, yararlı bulunuyor /*örneğin, ./geçerli dizine veya ./*geçerli dizinde her öğe için.
psur

3
@ psur veya ./*/sadece alt klasörleri almak için kullanabilirsiniz , tüm öğeleri değil
relascope 23

7
Sıralı versiyon:du -sh /* | sort -h
Vu Anh,

2
@ c1phr Eğer sizde yoksa, sortonu da -hbırakmanız gerekir du, aksi halde sıralama kilo / mega / gigabaytları karıştırır. du -s /* | sort -nr.
Thomas

79

Sık sık en büyük dizinleri bulmam gerekir, bu yüzden bunu yaptığım en büyük 20 diziyi içeren bir sıralama listesi almak için:

du -m /some/path | sort -nr | head -n 20

Bu durumda, boyutlar megabayt olarak bildirilecektir.


11
İşte daha okunabilir du -sh / some / path okunması için bir yol | sıralama -hr | kafa -n 20
Xedecimal

6
@Xedecima, h kullanma probleminin, farklı boyutlarda nasıl işlem yapılacağını bilmiyor. Örneğin 268K 255m daha yüksek sıralanır ve her iki 2.7G daha yüksek sıralanır
chrisan

4
'Sort' komutundaki -h (insan tarafından okunabilir) argümanı bu değerleri doğru okumalıdır. Tıpkı du's -h flag'ın onları ihraç ettiği gibi. Ne çalıştırdığına bağlı olarak tahmin ediyorum.
Xedecimal

16.04 Ubuntu'da çalışır. Güzel ipucu.
SDsolar

sudo du -haxt 1G / | sıralama -hr | kafa -30
sapkın

22

Bunun için Ncdu kullanmak hoşuma gidiyor , imleci gezinmek ve gerçekten iyi çalıştığı dizin yapısını incelemek için kullanabilirsiniz.


Muhteşem. Anahtar kelimeler: du ncurses ile buluşuyor. bDizindeki bir kabuk içine bırakmak için kullanabilirsiniz .
Ciro Santilli,

11

Mevcut cevaplar çok faydalıdır, belki bazı acemiler (benim gibi) bunu da faydalı bulabilir.

  1. Çok basit bir döngü, ancak benim için bu, diğer boyutlarla ilgili bazı işlemler için iyi bir başlangıçtı:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. İlk cevaba çok benzer ve neredeyse 1 ile aynı sonuca varır.), Ancak bir alt dizinde ise * ile.

    du -sh ./*
    

for eachKonsol karakterlerini (örn. \033[) klasörler listesine
eklediğinden

@machineaddict ne demek istediğinden emin değil. Bunu her zaman kullanıyorum, benim için işe yarıyor.
Martin

ile başlayan komutunuzu çalıştırmayı deneyin for each. işe yaramayacak
machineaddict

Komutu tam olarak burada yazıldığı gibi çalıştırıyorum. her biriyle başlayarak. Eserleri.
Martin

7

Aşağıdaki duçağrı BSD sistemlerinde çalışmalıdır:

du -d 1 /

1
Benim du(Ubuntu 10.4) -dseçeneğim yok. Hangi sistemdesin?
Thomas

Benim openSUSE'mde -d seçeneğine sahip değil :(
2ndkauboy

Tamam, o zaman sadece bir BSD seçeneği (ben OS X'im).
Philipp,

BSD üzerinde sağ taşınabilir seçenek kombinasyonu / * NIX du -sk /*. O -kkadar çok şeyden nefret ediyorum ki . Linux -htamamen kayalar.
Dummy00001

diğer sistemlerde, onun--max-depth
Vishnu Kumar

4

Bu kolay değil. duKomut dosyaları ve klasörleri (varsayılan) veya komut satırından (opsiyon belirttiğiniz tüm öğelerin sadece boyutlarını gösterir ya -s).

Linux'ta okunabilir boyutta olan en büyük öğeleri (dosya ve klasörler) sıralamak için:

du -h | sort -h

Bu sizi bir sürü küçük dosyaya gömer. Onlardan kurtulabilirsiniz (örneğime --threshold1 MB):

du --threshold=1M -h | sort -h

Bu komutun avantajı, gizli nokta klasörleri (ile başlayan klasörler) içermesidir ..

Yalnızca klasörleri gerçekten istiyorsanız, kullanmanız gerekir, findancak dubirçok klasörü birkaç kez taramanız gerekeceğinden bu çok çok yavaş olabilir :

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

1
- eşiği ^^^ bu seçenek linux üzerinde mevcut değil
podarok

1
@podarok OpenSUSE 13.2 Linux'ta mevcuttur. Dağıtımınızın daha yeni bir sürümünü bulmaya çalışın veya paketin daha yeni bir sürümünü kendiniz derleyin.
Aaron Digulla

Ubuntu LTS (14.04) üzerinde çalışmaz. Bu en sonuncusu olanıdır))
podarok

@podarok GNU coreutils'in hangi sürümü? Benimki 8.24.
Aaron Digulla

1
Önbellekleme kötü bir terim olabilirdi. Superuser.com/a/597173/121352 numaralı bu bağlantı noktasında , disk içeriğini bir kez haritaya koyduğumuz ve daha sonra diske tekrar basmak yerine bu haritadan verileri kullanmaya devam ettiğimiz bir şey olduğunu düşünüyordum .
Hennes,

1

duHer ikisinin de dosya sisteminin aynı blok boyutunu paylaştığından emin olmadan, farklı sistemlerde / makinelerde dizinleri karşılaştıramayacağınızı unutmayın . Bu, bazı dosyaları bir linux makinesinden bir nas'a rsync yaptığınız ve senkronize edilen dizini kendi başınıza karşılaştırmak istediğinizde geçerli olabilir. duFarklı blok boyutları nedeniyle farklı sonuçlar alabilirsiniz.


0

Ayrıca xdiskusage'i de kontrol etmek isteyebilirsiniz . Size aynı bilgiyi verecek, fakat grafiksel olarak gösterilecek, artı delme işlemine izin verecek (çok faydalı). KDE ve hatta Windows için benzer başka araçlar var.


0

lsİle birlikte kullanabilirsiniz awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

Çıktısı lsiçin borulu olan awk. awkveriyi işlemeye başlar. Standart sınırlayıcı alandır. Toplam değişken totsıfıra başlatılır; Aşağıdaki ifade, çıktı tarafından verilen her satır / satır için yürütülür ls. Sadece totboyutu ile artar . $5Beşinci sütun anlamına gelir (çıktı ls). Sonunda megabayt olarak toplamak için (1024 * 1024) ile bölüyoruz.

Bunu bir komut dosyasına veya işleve (.bashrc) dönüştürürseniz, dosya tiplerine göre belirli dizin alt kümelerinin boyutunu elde etmek için de kullanabilirsiniz.

Sistem genelinde bilgi istiyorsanız kdirstat, kullanışlı olabilir!


Birinin bu örneği genişletebileceği ve "belirli dizin alt kümeleri, dosya tiplerine göre" boyutu gibi; iyi bir başlangıç ​​noktası olabilir. Bununla birlikte, bu çözüm baştan kusurludur. Ben okuma cevaplar ve yorumlar tavsiye bu yöntemi kullanmak istiyorum her kullanıcı için bu soruya yanı sıra orada bağlantılı makale . Hiçbir şekilde yapamayacağınızı söylemiyorum. Sınırlamaları bilin, hepsi bu.
Kamil Maciorowski
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.