Bir dizinin (klasör) toplam boyutunu komut satırından nasıl belirlerim?


785

Bir dizindeki (klasör) tüm dosyaların toplam boyutunu (disk kullanımı) görüntülemek için basit bir komut var mı?

Bunları denedim ve istediğimi yapmıyorlar:

  • ls -lyalnızca bir dizindeki tek tek dosyaların boyutunu görüntüleyen
  • df -hdisklerimde yalnızca boş ve kullanılmış alanı görüntülüyor.



BTRFS gibi CoW dosya sistemlerinde neredeyse sıfır anlam ifade edebileceğini hatırlatan bir hatırlatma.
val

Yanıtlar:


1265

du"Dizinler için yinelenerek her dosya için disk kullanımını özetle" komutu , örneğin,

du -hs /path/to/directory
  • -h"okunabilir" sayılarını almaktır , örneğin 140Mbunun yerine 143260(KBbayt cinsinden)
  • -sözet için (aksi takdirde klasörün boyutunu değil, aynı zamanda her şey için sadece alırsınız olduğu içinde ayrı klasörde)

Kullandığınız gibi -hkullanarak insan okunabilir değerleri sıralayabilirsiniz seni

du -h | sort -h

-hBayrak sort"İnsan Okunabilir" boyut değerlerini dikkate alacaktır.


Tüm dosyaları ve dizinleri tekrar tekrar listelemekten kaçınmak istiyorsanız, --max-depthkaç öğenin görüntüleneceğini sınırlamak için parametreyi sağlayabilirsiniz. En yaygın,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
Ekstra mil gitmek için saygı. :)
myusuf3

93
Kullandığım du -shhatırlamak için bir yol olarak veya doosh (NOT: Komut, hafıza amaçlı komut bayrakların sadece örgüt aynıdır)
Marco Ceppi

3
-Apparent-size denilen du için yararlı bir seçenek var. Bir dosyanın veya dizinin gerçek boyutunu bulmak için kullanılabilir (diskteki ayakizinin aksine), örneğin, yalnızca 4 karakterlik bir metin dosyası yaklaşık 6 bayt işgal eder, ancak yine de ~ 4K normal du -sh çıkışı. Ancak, - büyük boyutlu seçeneği iletirseniz, çıktı 6 olacaktır. Diyelim ki: - Büyük boyutlu baskı, disk kullanımı yerine görünen boyutlar; görünür boyut genellikle daha küçük olsa da, ('seyrek') dosyalarındaki delikler, dahili parçalanma, dolaylı bloklar nedeniyle daha büyük olabilir
Hopping Bunny

4
Bu da OS X için çalışıyor! Teşekkürler, hem yerel makinemdeki hem de sunucumdaki dosyaları temizlemenin bir yolunu arıyordum, ancak otomatik yöntemler işe yaramadı. Bu yüzden koştum du -hs *ve en büyük dizine girdim ve hangi dosyaların çok büyük olduğunu öğrendim ... Bu çok iyi bir yöntem ve en iyi bölüm hiçbir şey yüklemeniz gerekmiyor! Kesinlikle benim olumlu oyumu hakediyor
Dev

@BandaMuhammadAlHelal İki nedenin olduğunu düşünüyorum: yuvarlama ( dudeğerin seçilen birimde birden fazla rakamı varsa, belirli bir yuvarlama var), onluk değeri, seçilen birimde birden fazla rakam içeriyorsa ve klasik 1024'e karşı 1000 önek sayısı. değerlerini gösterdiği birimleri değiştirme duseçeneği -B(veya --block-size) vardır veya bayt cinsinden "raw" değerini almak -byerine kullanabilirsiniz -h.
Marcel Stimberg

164

Son zamanlarda, hızlı bir şekilde size dizin boyutları hakkında genel bilgi veren harika bir ncurses tabanlı etkileşimli araç buldum. Yıllarca bu tür bir araç aradım.

  • hızlı bir şekilde dosya hiyerarşisi içinde azar azar
  • Örneğin büyük geçici dosyaları aracın içinden silebilirsiniz.
  • son derece hızlı

Komut satırı için baobab olarak düşünün :

apt-get install ncdu

11
Bu kesinlikle harika! DaisyDisk gibi, OSX için
subZero

3
ncduharika! Kurduktan sonra, sadece bunu yapın ncdu /. Sistemdeki en büyük dosyaları çok hızlı bir şekilde bulacaksınız. Ayrıca hncdu'nun konsol arayüzünün içindeyken tuşuna basın . Çok kullanışlı kısayolları var
vlad-ardelean

Bu tam ihtiyacım olan şeydi: çok basit, çok verimli. Saf aşk.
user3790897

52

Bu, boyutu tekrarlı olarak bulur ve her klasör adının yanına, altta toplam boyut ve tüm insan formatına yerleştirir.

du -hsc *


10

tree bu iş için başka bir yararlı komut:

Sadece kurun sudo apt-get install treeve aşağıdakini yazın:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Gönderen adam ağacın :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

Aşağıda toplam, klasör ve dosya boyutunu yazdırmak için kullanıyorum:

$ du -sch /home/vivek/* | sort -rh

ayrıntılar

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Çıktı

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

Cevaplar du, bir dizinin toplam boyutunu bulma aracı olduğunu açıkça ortaya koydu . Bununla birlikte, dikkate alınması gereken birkaç faktör vardır:

  • Bazen, dudosya sistemi tarafından ayrılan alanı, tek tek dosyaların boyutlarının toplamından farklı olabileceği için yanıltıcı olabilir. Tipik olarak dosya sistemi bir dosya için 4096 bayt ayırır, içinde sadece bir karakter saklasanız bile!

  • 2 ve 10 birimin gücüne bağlı olarak çıkış farkları. -hAnahtarını du, bir insan tarafından okunabilen çıktı vermek üzere 2 ^ 10 (1024), 2 ^ 20 (1048576) tarafından vb bayt sayısını böler. Birçok insan 10'luk güçleri görmeye daha alışmış olabilir (örneğin 1K = 1000, İM = 1000000) ve sonuçtan şaşırmış olabilir.

Bir dizindeki tüm dosyaların toplam boyutlarını bayt cinsinden bulmak için şunu yapın:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Örnek:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

Find-ls-awk, # 1 büyük klasörler için yanlış bir değer döndürür . Yeni awk için ekleyebilir --bignumveya -M; Bu bir seçenek değilse find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 kullanın .
goozez

Eğer kullanılan 2'nin güçleri bir problemse, şu --siseçenek var: "like -h, fakat 1000'in 1024 değil 1000 güçlerini kullan"
muru

1

Yalnızca okunabilir bir biçimde olan dizin boyutu için aşağıdakini kullanın:

du -hs directoryname

Bu muhtemelen doğru bölümde değil, ancak komut satırından deneyebilirsiniz:

ls -sh filename

-sBoyutudur ve -hokunabilir insandır.

Aşağıdaki gibi listede -lgöstermek için kullanın ls:

ls -shl

0

du /foldernameBir klasörün boyutunu bilmek standart komuttur. Man sayfasını okuyarak seçenekleri bulmak en iyi yöntemdir:

man du

Komutu kullanmadan önce man sayfasını okumalısınız ( çevrimiçi olarak erişilebilir ).


0

İşte çalışacak bir POSIX betiği:

  • Bir dosya
  • Dosyalar
  • Bir dizin
  • Dizinler
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Kaynak


0

İstediğiniz dizinde çok sayıda alt dizin varsa, aşağıdakileri kullanın:

$ cd ~/your/target/directory
$ du -csh 

-C, büyük bir toplam üretmek --total
her bir bağımsız değişken sadece toplam --summarize ekran -s
-h, insanlar tarafından okunabilir biçimde --human-readable boyutları (örneğin, 1H 234M 2G)

bu, geçerli dizindeki tüm dosyalar / klasörler tarafından kullanılan bellek kullanımının toplamını oluşturur.


-1

Bence en iyisi şudur:

du -h directory_name | tail -n1

Bu, yalnızca ilgilendiğiniz dizinin boyutunu gösterecek ve bu dizindeki herhangi bir dizin ve dosyanın boyutunu yazdırmayacaktır.

Klasörün büyüklüğü büyükse du'nun daha uzun zaman alacağını eklemeliyim. Bu komutun çalışması için sabırlı olmalısınız. Diğer unix komutlarında olduğu gibi, bu işlemden timeönce kullanacağınız işlem için toplam süreyi bu komuttan önce öğrenebilirsiniz :

time du -h directory_name | tail -n1

6
duBunun için bir seçenek var:-s
muru 4:15
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.