Bir dizinin boyutunu komut satırından nasıl alabilirim?


1066

lsKomutu kullanarak seçeneği kullanarak bir dizinin boyutunu (dizinleri ve alt dizinleri içeren) elde etmeye çalıştım l. Dosyalar için çalışıyor gibi görünüyor ( ls -l file name), ancak bir dizinin boyutunu (örneğin, ls -l /home) almaya çalışırsam , sadece 4096 bayt alırım, her ne kadar tamamen büyük olsa da.


18
1) Kesinlikle konuşursak, yapamazsın. Linux'un klasörleri değil, dizinleri vardır. 2) Bir dizinin boyutu (diğer dosyaları gösteren inode'ları tutan özel bir dosyadır) ve bu dizinin içeriğinin boyutu arasında bir fark vardır. Diğerlerinin de belirttiği gibi, du komutu ikincisini sağlar, bu istediğiniz gibi görünmesini sağlar.
jamesqf

11
Yeni gibi göründüğünüzde , 1130301 yerine 1.1M gibi insan dostu gösterimde basılacak dosyaların boyutlarını elde etmek -hiçin bu -lseçeneğe (yani ls -lh) ekleyebileceğiniz yararlı seçeneği işaretleyeceğim. " du -hs@sam'ın dizinler hakkındaki sorunuza cevap olarak verdiği komutta" insan tarafından okunabilir "anlamına da gelir ve ayrıca df -hdiskte kullanılan ve kullanılan boş alanların okunabilir miktarlarını gösteren de görünür .
msouth

Yanıtlar:


1490

du -sh file_path

açıklama

  • du( d isc u sage) komutu, file_path alan kullanımını tahmin eder
  • Seçenekler -sh(den man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Birden fazla dizini kontrol etmek ve toplamı görmek için şunu kullanın du -sch:

      -c, --total
             produce a grand total
    


15
Bu sevdiğim cevap türüdür <3 duman du

Unix benzeri yapımcılar için ipucu: Bir dahaki sefere, sadece önce "diskusage" komutunu, hatta belki de "disk kullanımı" ... sonra kısayol ...;)
jave.web

find Örneğin, mevcut alt yoldaki belirli alt dizinlerdeki boşluk miktarını saymakla çok iyi çalışır : $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev

321

Sadece dukomutu kullan:

du -sh -- *

Geçerli dizindeki tüm gizli olmayan dizinlerin, dosyaların vb. insan tarafından okunabilir biçimde kümülatif disk kullanımını sağlayacaktır.

dfKomutu, dizini içeren dosya sistemindeki boş alanı bilmek için kullanabilirsiniz :

df -h .

4
du -sh *Bu dizindeki dosyalardan herhangi biri bir çizgi ile başlarsa "bilinmeyen seçenek" hataları atmaya başlar. du -sh -- *
Yapması daha

1
du -sh *Gizli klasörlerin hafıza kullanımlarını göstermiyor
Prashant Prabhakar Singh

4
du -sh -- * .*dotfiles eklemek için. Bu, .gitörneğin büyük bir dizin eklemek için kullanışlıdır . Alternatif olarak, setopt globdotszsh'de dotfiles'i varsayılan olarak sabitleyebilirsiniz.
cbarrick

1
Ne yapar --? Seçenek argümanlarını sona erdirmek için kabuk yerleşik yapılarına uygulandığını biliyorum , ancak duyerleşik bir uygulama değil ve bu kullanım için belgelenmiş görmüyorum du: linux.die.net/man/1/du
flow2k

Bazen eklemek isteyeceksiniz -b( --apparent-size)
elig

196

dusenin arkadaşın. Eğer sadece bir dizinin toplam boyutunu bilmek istiyorsanız, o zaman içine atlayıp çalıştırın:

du -hs

Ayrıca, hangi alt klasörlerin ne kadar disk alanı kapladığını bilmek isterseniz ?! Bu komutu aşağıdakilere genişletebilirsin:

du -h --max-depth=1 | sort -hr

Size tüm alt klasörlerin boyutunu vereceğim (seviye 1). Çıktı sıralanacaktır (en üstteki klasör).


Linux'un bazı (belki daha eski?) Sürümlerinde göründüğü gibi, sort'in h anahtarı yok ve bu yüzden bulabileceğim bir sonraki en iyi komut şudur: du -c --max-depth = 1 | sort -rn
richhallstoke 13:16

@richhallstoke kullanıyorsanız ncdu, dosyalar varsayılan olarak azalan boyuta göre sıralanır.
Armfoot

3
| | -Hr "için 1 + 1
afranques

67

duDüzgün çıktı almak için görünüşte 100 argüman iletmeniz gerektiğinden kullanımı karmaşık olabilir. Ve gizli klasörlerin boyutunu bulmak bile daha zor.

Hayatınızı kolaylaştırın ve kullanınncdu .

ncdu

Kolayca göz atılabilir olan klasör özetleri başına olsun.


9
Bu doğru cevap olmalı, en azından sisteme yazılım yükleyebilenler için. Ne yazık ki çoğu insan bunu görecek kadar aşağı kayar sanmıyorum.
DavidR

@ RickyNotaro-Garcia Nope, bu gizli nesneleri görmezden gelir ve büyük dizinlerde asılı. Bir düzine boru ile Tamam bir çözüm olabilir, ama neden hayatını boşa.
Teque5

@ RickyNotaro-Garcia Bütün yorumumu oku: Sizin teşebbüsünüz gizli nesneleri görmezden gelir ve büyük dizinlerde asılı kalır .
Teque5

2
ncduharika, unuturken hep bu komutu ararım. Hızlı, gezinmesi kolaydır ve büyük klasörleri kolayca bulmanıza yardımcı olur. Bilginize, macOS için ve muhtemelen tüm linux makineleri için kullanılabilir.
Lukas,

..ve sen düz klasörleri silebilirsiniz ncdubasarak danahtar
ccpizza

32

Diğerleri de bahsetti du, fakat aynı zamanda ncurses'ın sürümü olan duve etkileşim sağlayan Ncdu'dan da bahsetmek istiyorum : Dizin hiyerarşisini doğrudan keşfedebilir ve alt dizinlerin boyutlarını görebilirsiniz.


26

duKomut dosyasının disk kullanımını gösterir.

-hSeçenek insanlar tarafından okunabilir şekilde sonuçları göstermektedir (örneğin, 4k, 5M, 3G).

du -h (file name)

22

Yukarıdaki örneklerin tümü size diskteki verilerin boyutunu söyleyecektir (yani, belirli bir dosyanın kullandığı, genellikle gerçek dosya boyutundan daha büyük olan disk alanı). Veriler gerçekten bu diskte depolanmadıysa ve yalnızca inode referansları varsa, bunların size doğru bir rapor vermeyeceği bazı durumlar vardır.

Örneğinizde, ls -l'yi tek bir dosya üzerinde kullandınız; bu, dosyanın gerçek boyutunu döndürdü, diskteki boyutunu DEĞİL.

Gerçek dosya boyutlarını bilmek istiyorsanız, -b seçeneğini du'ya ekleyin.

du -csbh .

Evet. Dosyaları sıkıştıran ve temizleyen sdfs kullanıyorum, bu yüzden bu kadar düşük sayıları neden rapor ettiğini çözemedim. Ls ile dosyaların gerçek boyutları şu şekildedir: du -b
Ryan Shillington

15

şahsen ben kullanmak istemiyorsanız, bunun en iyisi olduğunu düşünüyorum ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

Bu, geçerli sürücüde ne kadar disk alanı kaldığını gösterir ve ardından her dosya / dizinin ne kadar sürdüğünü gösterir. Örneğin,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

Bilginize, diskteki boyutunu rapor gibi görünüyor. yani, muhtemelen en yakın 4KB'ye kadar doldurulacaktır.
15’te


9

Geçerli dizindeki tüm dosyaları tekrarlı olarak bul ve boyutlarını topla:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Ben kullanacağı -not -type dsıradan dosyaları (sadece boyutlarını toplamak -type fvs.) değil, aynı zamanda sembolik bağlantıların boyutları ve.
anton_rh

Bu harika, çünkü dosyaları saklamak için gereken yükü alamazsınız, ancak yalnızca dosyaların boyutunu alırsınız.
bballdave025

9

.Bash_aliases cihazınız için bir işlev

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

örnek çıktı:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

alt dizinler için:

$ dusort .
$ dusort /var/log/


6

Not duçünkü bir dizin dizindeki tüm dosyaların sadece toplam boyutundan daha genellikle büyük olan medya üzerinde kapsadıkları alan yazdırır dudikkate medya üzerinde depolanan tüm yardımcı bilginin büyüklüğünü alır uyum içinde dizin organize etmek dosya sistemi formatı ile.

Dosya sistemi sıkıştırılabilirse, o zaman dutüm dosyalar toplam boyutundan daha küçük bir sayı verebilir, çünkü dosyalar dosya sistemi tarafından dahili olarak sıkıştırılabilir ve medyada içerdikleri sıkıştırılmamış bilgilerden daha az yer kaplarlar. Seyrek dosyalar varsa aynı.

Dizinde sert bağlantılar varsa, dizindeki dubirkaç farklı dosya medyadaki aynı verilere başvurduğundan daha küçük değeri de basabilir.

Dizindeki tüm dosyaların basit toplam boyutunu elde etmek için aşağıdaki tek satırlık kabuk ifadesi kullanılabilir (bir GNU sistemi varsayarsak):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

veya daha kısa:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Dizindeki tüm dizin dosyalarının (ve alt dizinlerinin sırayla) boyutlarını tek tek toplar. Sembolik bağlantılarda, sembolik linkin büyüklüğünü rapor eder (sembolik bağın işaret ettiği dosyaya değil).


5

Kullanabilirsiniz

du -sh directory/

ve

du -sh filename

Klasör veya dosyanın işgal ettiği alanı bilmek.

df -h

disk kullanımını insan tarafından okunabilir biçimde gösterir.

Ayrıca GUI tabanlı bir program var Disk Usage Analyzer.


5

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

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

Kaynak

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.