Dizinleri ve toplam boyutlarını listelemek için ls kullanma


828

lsUnix'te bir alt dizinin toplam boyutunu ve tüm içeriğini 4K(sanırım) sadece dizin dosyasının kendisi olduğu gibi aksine listelemek mümkün mü ?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

Adam sayfalarını temizledikten sonra boş çıkıyorum.


4
bunun yerine du -s kullanmak istiyorsunuz
guns

21
Ördekler için arama:alias ducks='du -cksh * | sort -hr | head -n 15'
Sebi

Yanıtlar:


1550

Şuna benzer bir şey deneyin:

du -sh *

kısa versiyonu:

du --summarize --human-readable *

Açıklama:

du: D isk U adaçayı

-s: Belirtilen her dosya için bir özet görüntüler. (Eşdeğer -d 0)

-h: "İnsan tarafından okunabilir" çıktı. Kullanım ünitesi ekleri: B YTE, K ibibyte (KiB), E ebibyte (MIB), G ibibyte (gib), T ebibyte (TiB) ve p ebibyte (PIB). (Temel2)


55
Ayrıca -c (genel bir toplam üretmek) güzel.
meridius

50
du --max-derinlik 1, yalnızca 1 derinlikteki dosya / klasör boyutlarını gösterir, artık dağınık değildir ve bir klasör içindeki büyük klasörleri bulmak kolaydır.
CousinCocaine

12
gizli dosyalar da nasıl dahil edilir?
Zakaria Braksa

5
@ Zak içinde zsh kullanarak kullanabilirsiniz *(D)gizli ( d ot) dosyaları ile birlikte normal dosyaları. Bash kullanırken * .[!.]*, her ikisini de eşleştirmek için kullanabilirsiniz .
Sebi

22
du -sch * .[!.]* | sort -rhbrew install coreutilsdu -sch * .[!.]* | gsort -rh
Alanın

319

du -sk * | sort -nklasörleri boyuta göre sıralar. Yer açmak için faydalı ..


11
| tail -rÖnce en büyüğüne göre sıralamak için a ekleyin .
Phrogz

68
sort -rnişleri ters sayısal sırada sıralar. sort -rn | head -n 10herhangi bir ilgi varsa, sadece ilk birkaçını gösterecektir.
AgileTillIDie

14
sort -rhdu -cksh *insan tarafından okunabilen birimleri sıraladığı için iyi çalışacaktır .
Sebi

@Sebi -h ne yazık ki Mac'te sıralama için geçerli bir parametre değil
anon58192932

@Sebi ayrıca -c gerekli değildir du -ksh | sort -rn, aynıdır du -cksh | sort -rn. Aynen olduğu du -kshgibi du -cksh.
hello_there_andy

108
du -sh * | sort -h

Bu, insan tarafından okunabilir biçimde görüntülenir.


6
Daha konusunda sort -hburada: gnu.org/software/coreutils/manual/... Bu sıralama özellikle orada 103K, 102M, 1.1Gtümü olmasa da bu günlerde sistemleri bir sürü geçerli olmalıdır vb.
Evgeni Sergeev

duh -shm * | -n?
std''OrgnlDave

10
Büyük, küçük bir ek işleri du -sh * | sort -rh(daha büyük ilk klasörleri listeleyen için -r)
bölümü içindeki

Gizli dosyaları / dizinleri dahil etmek için; du -sh $(ls -A) | sort -h
jmd_dk

55

Geçerli dizindeki en büyük dizinleri insan tarafından okunabilir biçimde listelemek için:

du -sh * | sort -hr

Satır sayısını kısıtlamanın daha iyi bir yolu

du -sh * | sort -hr | head -n10

-nListelenen satır sayısını kısıtlamak için bayrak ekini artırabileceğiniz yer

Örneklem:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

Okumayı daha kolay hale getirir :)


27

Biçimde görüntülemek için şunu ls -lhkullanın:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Awk kodu açıkladı:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

Örnek çıktı:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd

Bu çıktı sıralamak için herhangi bir yolu var mı? Ayrıca mac üzerinde herkes için bu parlak çıkarırsanız çalışır--color=no
anon58192932

@ anon58192932 sort --key=5,5hBeşinci sütundan 'insan tarafından okunabilir birimleri' sıralamak için çıktıyı birbirine bağlayabilirsiniz
Sebi

sort: stray character in field spec: invalid field specification 5,5 saat geri döner .
Mac'lerden

@ anon58192932 Mac ile ilgili bir soru sorabilirsiniz, eminim yardımcı olabilecek biri var. Bu soru GNU / linux
Sebi

2
Bu yanıtı kullanarak rengi korumanın bir yolu var mı?
Pablo Canseco

20

İstediğiniz komut 'du -sk' du = "disk kullanımı" dır.

-K bayrağı, disk sektörlerinin varsayılan değeri (512 baytlık bloklar) yerine kilobayt cinsinden çıktı sağlar.

-S bayrağı yalnızca üst düzey dizindeki şeyleri listeler (varsayılan olarak geçerli dizin veya komut satırında belirtilen dizin). Du bu konuda ls ters davranış sahip olması tuhaf. Varsayılan olarak du, her bir alt dizinin disk kullanımını özyinelemeli olarak verecektir. Buna karşılık, ls yalnızca belirtilen dizindeki liste dosyalarını verecektir. (ls -R size özyinelemeli davranış verir.)


Bunu kök dizinde denedi, yine de çok sayıda iletiyle sonuçlanan alt dizinleri listelemeye çalışıyor.
Nagev

14

Bu kabuk işlevi bildirimini kabuk başlatma komut dosyalarınıza yerleştirin:

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

Ben dulsher ikisinden duve ls(bu sırayla) çıktı gösterir çünkü çağırdı :

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

Açıklama:

Yardımcı pasteprogram, verdiğiniz belirtime göre girdilerinden sütunlar oluşturur. İki girdi dosyası verildiğinde, bunları ayırıcı olarak bir sekmeyle yan yana koyar.

du -hs -- "$@" | cut -f1İlk dosya (çıktı akışı gerçekten) ve ls -ld -- "$@"ikinci dosya çıktısını veriyoruz .

İşlevde, "$@" tüm komut satırı argümanları, çift tırnak içinde her listesine değerlendirecektir. Bu nedenle, globbing karakterlerini ve boşluklarla vb. Adlarını anlayacaktır.

Çift minuses ( --), komut satırı sonu seçeneklerinin duve işaretlerini belirtir ls. Bu olmadan, diyerek duls -lşaşırtmak duve herhangi bir seçenek duolduğunu lsşaşırtmak yok ls(hem kamu mevcut ve seçenekler aynı şeyi ifade etmeyebilir ve bu oldukça karmaşa olurdu).

cutSonra dubasitçe ilk sütununu dışarı keser du -hsçıkışı (boyutları).

duÇıktıyı sola koymaya karar verdim , aksi takdirde titrek sağ sütunu (dosya adlarının değişen uzunluklarından dolayı) yönetmek zorunda kalıyordum.

Komut, komut satırı işaretlerini kabul etmez.

Bu hem içinde hem de bashiçinde test edilmiştir ksh93. İle çalışmaz /bin/sh.


Bu iyi. Bir hatta izinler ve boyutlar
Ben

7

Bunun yerine her zaman du -sk( -kdosya boyutunu kilobayt cinsinden gösteren bayrak) kullanırım.


5
molf'un daha doğru ve daha iyi açıklanmış kabul edilen cevabına ek bilgi sağlayan bu bir yorum olmalıdır. Kendi başına bir cevap olarak düşünülmemelidir
code_monk


7

ncdu ncurses'in du

Bu harika CLI yardımcı programı, büyük dosyaları ve dizinleri etkileşimli olarak kolayca bulmanızı sağlar.

Örneğin, iyi bilinen bir projenin ağacının içinden :

sudo apt-get install ncdu
ncdu

Sonuç:

resim açıklamasını buraya girin

Sonra, /driversklasöre gitmek için klavyeme aşağı ve sağa giriyorum ve görüyorum:

resim açıklamasını buraya girin

ncdu tüm ağaç için başlangıçta yalnızca bir kez dosya boyutlarını hesaplar, böylece etkilidir.

"Toplam disk kullanımı" vs "Görünen boyut" ile benzerdir duve bunu açıkladım: `du` çıktısı neden` ​​du -b` den çok farklı?

Proje ana sayfası: https://dev.yorhel.nl/ncdu

İlgili sorular:

Ubuntu 16.04'te test edildi.

ncdu etkileşimli olmayan kullanım

Bir başka harika özellik ncdu önce boyutları bir JSON biçiminde döküp sonra tekrar kullanabilmenizdir.

Örneğin, çalışma dosyasını oluşturmak için:

ncdu -o ncdu.json

ve ardından aşağıdakilerle etkileşimli olarak inceleyin:

ncdu -f ncdu.json

Bu, NFS gibi çok büyük ve yavaş bir dosya sistemi ile uğraşıyorsanız çok kullanışlıdır.

Bu şekilde, önce yalnızca bir kez dışa aktarabilirsiniz, bu da saatler sürebilir ve ardından dosyaları keşfedebilir, bırakabilir, tekrar keşfedebilir vb.

Çıktı biçimi sadece JSON'dur, bu nedenle diğer programlarla da yeniden kullanımı kolaydır, örneğin:

ncdu -o -  | python -m json.tool | less

basit bir dizin ağacı veri yapısını gösterir:

[
    1,
    0,
    {
        "progname": "ncdu",
        "progver": "1.12",
        "timestamp": 1562151680
    },
    [
        {
            "asize": 4096,
            "dev": 2065,
            "dsize": 4096,
            "ino": 9838037,
            "name": "/work/linux-kernel-module-cheat/submodules/linux"
        },
        {
            "asize": 1513,
            "dsize": 4096,
            "ino": 9856660,
            "name": "Kbuild"
        },
        [
            {
                "asize": 4096,
                "dsize": 4096,
                "ino": 10101519,
                "name": "net"
            },
            [
                {
                    "asize": 4096,
                    "dsize": 4096,
                    "ino": 11417591,
                    "name": "l2tp"
                },
                {
                    "asize": 48173,
                    "dsize": 49152,
                    "ino": 11418744,
                    "name": "l2tp_core.c"
                },

Ubuntu 18.04'te test edildi.


1
İnanılmaz. Paylaşım için teşekkürler!
Frank Fu

Katılıyorum, ncdu gitmek için bir yol ... ama JSON dosyasını aramak mümkün olup olmadığını biliyor musunuz? Yani, belirli bir dosya / klasörün tam yolunu alın.
FGV

1
@FGV Ben ncdu çıktı olabilir sanmıyorum, bir olasılık JSON ayrıştırma basit bir python komut dosyası kesmek olacaktır.
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功


4

Bu sevdiğim biri

update : Geçerli dizinde dosya göstermediği için öncekini beğenmedim, sadece dizinleri listeledi.

/varUbuntu için örnek çıktı :

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var

3

Bunların hepsi harika öneriler, ancak kullandığım şey:

du -ksh * | sort -n -r

-ksh dosya ve klasörlerin insan tarafından okunabilir bir biçimde ve megabayt, kilobayt, vb. olarak listelendiğinden emin olur. Daha sonra bunları sayısal olarak sıralar ve sıralamayı tersine çevirir, böylece daha büyük olanları ilk sıraya koyarsınız.

Bu komutun tek dezavantajı, bilgisayarın Gigabyte'nin Megabyte'den daha büyük olduğunu bilmemesi, bu yüzden sadece sayılara göre sıralanması ve genellikle aşağıdaki gibi listeler bulmanızdır:

120K
12M
4G

Sadece üniteye bakmaya dikkat edin.

Bu komut Mac'te de çalışır (ancak sort -hörneğin).


-hBayrağı dukomuttan kaldırırsanız, bu dezavantajı kesin
Carlos Ricardo

Veya sıralama -hyerine de kullanabilirsiniz -n.
Sebi

ya da sadece bir grep G ile boru
Gforce89

3
du -S

du başka bir yararlı seçenek var: du alt dizinlerin boyutunu içermez -S, --separate-dirssöylemek - bazı durumlarda kullanışlı.

Örnek 1 - Yalnızca bir dizindeki dosya boyutlarını gösterir :

du -Sh  * 
3,1G    10/CR2
280M    10

Örnek 2 - Dizindeki dosya boyutlarını ve alt dizinleri gösterir:

du -h  * 
3,1G    10/CR2 
3,4G    10

3

du -sm * | sırala

Boyuta göre çıktı



2

dosya boyutlarını karşılaştırmak istiyorsanız sadece bir uyarı. du, dosya sistemine, blok boyutuna, ... bağlı olarak farklı sonuçlar üretir.

Dosyaların boyutu farklı olabilir, örneğin yerel sabit diskinizdeki ve USB yığın depolama aygıtınızdaki aynı dizini karşılaştırarak. Ben dizin boyutunu özetlemek için ls de dahil olmak üzere aşağıdaki komut dosyası kullanın. Tüm alt dizinleri dikkate alarak bayt cinsinden sonuç.

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"

1

Geçerli dizinin dosya ve alt dizin boyutlarını özyinelemeli olarak görüntülemek için:

du -h .

Görüntülemek için aynı boyutta bilgi ancak olmadan sadece kullanmak, (büyük bir liste olabilir) yinelemeli bunların alt dizinleri baskı --max-derinlik seçeneği:

du -h --max-depth=1 .

1

Bir süre için, rmbash komutunu kullanmak yerine ana klasörümdeki dosyaları silmek için Nautilus'u (RHEL 6.0'da Gnome masaüstünde) kullandım . Sonuç olarak, tarafından gösterilen toplam boyut

du -sh

kullandığımda her bir alt dizinin disk kullanımının toplamıyla eşleşmedi

du -sh *

Nautilus'un silinen dosyaları Çöp Kutusu klasörüne gönderdiğini ve bu klasörün du -sh *komutta listelenmediğini fark etmem biraz zaman aldı . Yani, birisinin aynı problemle karşılaşması durumunda bunu paylaşmak istedim.


1

Hmm, en iyi yol bu komutu kullanmaktır:

du -h -x / | sort -hr >> /home/log_size.txt

Daha sonra tüm boyut klasörlerini tüm sunucunuz üzerinden alabilirsiniz. En büyük boyutları bulmanıza yardımcı olmak kolaydır.


1

Aşağıdakileri hatırlamak kolaydır

ls -ltrapR

dizin içeriğini listele

-Uzun bir liste biçimi kullanırım

- değişiklik zamanına göre sıralayın, en yenisi önce

-r, - sıralama sırasında ters sırayı tersine çevir

-a, --all ile başlayan girdileri yok saymayın.

-p, --indicator-style = dizinlere eğik çizgi ekleme / gösterge

-R, - özyinelemeli liste alt dizinleri özyinelemeli

https://explainshell.com/explain?cmd=ls+-ltrapR


1

Üzerinde sizedizinleri listelemek istediğiniz üzerinde daha fazla denetim istiyorsanız, threshold( -t) anahtarını aşağıdaki gibi kullanabilirsiniz :

$ du -ht 1000000000 | sort --reverse

du- disk uadaçayı
h - insan tarafından okunabilir format
t - eşik boyutu

Burada, 1 GB'den büyük tüm dizinleri listelemek istiyoruz.

$ du -ht 1G | sort --reverse

Açıklama :

Wiki'de açıklanan birimler şunlardır:

K, M, G, T, P, E, Z, Y (1024'ün gücü) veya
KB, MB, GB, TB, PB, EB, ZB, YB (1000'in gücü).


0

Benim durumumda rsync ile yansıtma sonra aynı dizini iki farklı sunucuda karşılaştırarak, Martin Wilde tarif benzer bir sorunla karşılaştı.

Bir komut dosyası kullanmak yerine bayt cinsinden boyutu sayar -bbayrağını ekledim duve iki sunucudaki farklılıkları ortadan kaldırabildiğim kadarıyla belirledim. -s -hAnlaşılır bir çıktı elde etmek için hala kullanabilirsiniz .


0

.bashrc gibi init betiğine yerleştirin ... def'i gerektiği gibi ayarlayın.

duh() {
  # shows disk utilization for a path and depth level
  path="${1:-$PWD}"
  level="${2:-0}"
  du "$path" -h --max-depth="$level"
}

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.