Komut satırından bir dizinin (klasör) toplam boyutunu nasıl belirleyebilirim?

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

Bunları denedim ve istediğimi yapmıyorlar.:

  • ls -l yalnızca bir dizindeki tek tek dosyaların boyutunu görüntüleyen veya
  • df -h, yalnızca disklerimdeki boş ve kullanılmış alanı görüntüler.

Komut du "dizinler için yinelemeli olarak her dosyanın disk kullanımını özetler" örn.,

du -hs /path/to/directory
  • -h "insan tarafından okunabilir" sayıları elde etmektir, örn. 140M yerine 143260 (kbyte cinsinden boyut)
  • -s özet içindir (aksi takdirde sadece klasörün boyutunu değil, aynı zamanda her şey için de alırsınız içinde klasörü ayrı ayrı)

Kullandığın gibi -h insan tarafından okunabilir değerleri kullanarak sıralayabilirsiniz

du -h | sort -h

Bu -h bayrak açık sort "insan Tarafından Okunabilir" boyut değerlerini dikkate alacaktır.


Tüm dosyaları ve dizinleri yinelemeli olarak listelemekten kaçınmak istiyorsanız, aşağıdakileri sağlayabilirsiniz: --max-depth kaç öğenin görüntüleneceğini sınırlamak için parametre. En sık, --max-depth=1

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

Son zamanlarda size dizin boyutları hakkında hızlı bir genel bakış sağlayan harika, ncurses tabanlı etkileşimli bir araç buldum. Yıllarca böyle bir alet aradı.

  • dosya hiyerarşisinde hızlı bir şekilde detaylandırma
  • örneğin, aracın içindeki büyük geçici dosyaları silebilirsiniz
  • son derece hızlı

Bunu şöyle düşün baobap ağacı komut satırı için:

apt-get install ncdu

Bu, boyutu yinelemeli olarak bulur ve her klasör adının yanına, alt kısımdaki toplam boyutla birlikte insan biçiminde koyar

du -hsc *

Tadını çıkar!

du foldername

Bu komut hakkında daha fazla bilgi burada

Toplam, klasör ve dosya boyutunu yazdırmak için kullandığım şey aşağıdadır:

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

Detaylar

 ------------------------------------------------------------   -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/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

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

Sadece üzerinden yükleyin sudo apt-get install tree ve aşağıdakileri yazın:

tree --du -h /path/to/directory......33.7M used in 0 directories, 25 files

-den insan ağacı:

-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.)

Cevaplar bunu açıkça ortaya koydu du bir dizinin toplam boyutunu bulmak için kullanılan araçtır. Ancak, faktörler birkaç dikkate alırlar :

  • Bazen, du çıktı, tek tek dosyaların boyutlarının toplamından farklı olabilecek dosya sistemi tarafından ayrılan alanı bildirdiği için yanıltıcı olabilir. Genellikle dosya sistemi, içinde yalnızca bir karakter saklamış olsanız bile bir dosya için 4096 bayt ayırır!

  • 2'nin gücü ve 10 ünitenin gücü nedeniyle çıkış farklılıkları. Bu -h değiştirmek du bayt sayısını böler 2^10 (1024), 2^20 (1048576) insan tarafından okunabilir bir çıktı vermek için vb. Birçok insan 10'luk güçleri görmeye daha alışkın olabilir (örneğin 1K = 1000, 1M = 1000000) ve sonuçtan şaşırabilir.

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

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

Örnek:

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

Alet Tozunu kullanabilirsiniz:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

Benim örneğim Windows'tan, ancak Linux ve Apple da destekleniyor:

https://github.com/bootandy/dust

Buna şartlandım. ll takma adı verilen komut ls -alF. Sadece altta bir dosya sayısı ve dosya boyutu eksik. Oynadığı du ve tree ama ihtiyacım olan toplamları alamadım. Bu yüzden yarattım lll bunu benim için yapmaya.

Senin içinde ~/.bashrc aşağıdakileri yerleştirin:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

Dosyayı kaydedin ve kullanarak kaynak . ~/.bashrc (veya terminalinizi yeniden başlatabilirsiniz).


Örnek çıktı

Hakkında güzel bir şey ll çıktı renklerdir. Bu ile korunur lll ancak kullanırken kayboldu find veya du:

lll sample output.png


TL;DR

Ekleyebileceğiniz bir bonus işlevi ~/.bashrc denir BytesToHuman(). Bu, çoğu konsol kullanıcısının büyük sayıları MıB, GiB vb.'Ye dönüştürmesini beklediği şeyi yapar:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

Ardından, yorumu iki satır arasında çevirin lll () böyle görünmek için işlev:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Şimdi çıktınız şöyle görünüyor:

lll sample output 2.png

Her zaman olduğu gibi tekrar kaynak yapmayı unutmayın . ~/.bashrc değişiklik yaparken. (Veya elbette terminali yeniden başlatın)

PS - Kendi kendine karantinada iki hafta sonunda bu beş yıllık hedef üzerinde çalışmam için bana zaman verdi.

du /foldername bir klasörün boyutunu bilmek için standart komuttur. Man sayfasını okuyarak seçenekleri bulmak en iyi uygulamadır:

man du

Adam sayfasını okumalısınız (mevcut Çevrimiçi) komutu kullanmadan önce.

BTRFS gibi inek dosya sisteminde neredeyse sıfır anlam ifade edebileceğini hatırlatan dostça hatırlatma.