Come posso ottenere le dimensioni di una directory dalla riga di comando?


1065

Ho cercato di ottenere le dimensioni di una directory (contenente directory e directory secondarie) utilizzando il lscomando con opzione l. Sembra funzionare per i file ( ls -l file name), ma se provo a ottenere le dimensioni di una directory (per esempio ls -l /home), ottengo solo 4096 byte, sebbene nel complesso sia molto più grande.


18
1) A rigor di termini, non puoi. Linux ha directory, non cartelle. 2) C'è una differenza tra la dimensione di una directory (che è un file speciale che contiene inode che puntano ad altri file) e la dimensione del contenuto di quella directory. Come altri hanno sottolineato, il comando du fornisce quest'ultimo, che è quello che sembra che tu voglia.
jamesqf,

11
dato che sembri nuovo, ti faccio solo notare l' -hopzione utile che puoi aggiungere -lall'opzione (es. ls -lh) per ottenere le dimensioni dei file da stampare in notazione umana come 1.1M invece di 1130301. La "h "nel du -hscomando che @sam ha dato come risposta alla tua domanda sulle directory significa anche" leggibile dall'uomo ", e appare anche in df -hcui mostra le quantità leggibili dall'uomo di spazio usato e libero sul disco.
msouth,

Risposte:


1490

du -sh file_path

Spiegazione

  • duIl comando ( d isc u sage) stima l'utilizzo dello spazio percorso_file
  • Le opzioni -shsono (da 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)
    

    Per controllare più di una directory e vedere il totale, utilizzare du -sch:

      -c, --total
             produce a grand total
    

44
... a meno che non si dispone di collegamenti fisici ;-) stackoverflow.com/questions/19951883/...
Rmano

15
Questo è il tipo di risposta che amo <3 È riassunto e una sorta di introduzione al comando due anche tu dai il modo di cercare maggiori dettagli man du...

Suggerimento per produttori simili a Unix: la prossima volta, esegui prima il comando "diskusage", o forse anche "utilizzo del disco" ... quindi il collegamento ...;)
jave.web

Funziona molto bene, ad find es. Per contare la quantità di spazio in specifiche sottodirectory nel percorso corrente: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev

321

Basta usare il ducomando:

du -sh -- *

ti darà l'utilizzo cumulativo del disco di tutte le directory, i file ecc. non nascosti nella directory corrente in formato leggibile dall'uomo.

Puoi usare il dfcomando per conoscere lo spazio libero nel filesystem contenente la directory:

df -h .

4
du -sh *inizia a generare errori di "opzione sconosciuta" se uno dei file in quella directory inizia con un trattino. du -sh -- *
Più

1
du -sh *non mostra gli usi di memoria delle cartelle nascoste
Prashant Prabhakar Singh,

4
du -sh -- * .*per includere dotfile. Questo è utile per includere una .gitdirectory possibilmente grande , per esempio. In alternativa in zsh è possibile setopt globdotsglob glob dotfile per impostazione predefinita.
cbarrick,

1
Che cosa --fa? So che si applica ai built-in della shell per terminare gli argomenti delle opzioni, ma dunon è un built-in, e non vedo questo uso documentato per du: linux.die.net/man/1/du
flow2k

A volte ti consigliamo di aggiungere -b( --apparent-size)
partecipare il

196

duÈ tuo amico. Se vuoi solo conoscere la dimensione totale di una directory, saltaci dentro ed esegui:

du -hs

Se anche tu vuoi sapere quali sottocartelle occupano quanto spazio su disco ?! È possibile estendere questo comando a:

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

che ti darà la dimensione di tutte le sottocartelle (livello 1). L'output verrà ordinato (la cartella più grande in alto).


Sembra su alcune versioni (forse più vecchie?) Di Linux, l'ordinamento non ha un interruttore h, e quindi il prossimo miglior comando che ho trovato è: du -c --max-depth = 1 | sort -rn
richhallstoke il

@richhallstoke se si utilizzano ncdui file sono ordinati per dimensione decrescente per impostazione predefinita.
Armfoot,

3
+1 per "| sort -hr"
afranques

67

dupuò essere complicato da usare poiché apparentemente devi passare 100 argomenti per ottenere un output decente. E capire le dimensioni delle cartelle nascoste è ancora più difficile.

Rendi la tua vita facile e utilencdu .

ncdu

È possibile ottenere riepiloghi per cartella facilmente consultabili.


9
Questa dovrebbe essere la risposta corretta, almeno per coloro che possono installare software sul sistema. Sfortunatamente non penso che la maggior parte delle persone scorrerà abbastanza in basso per vederlo.
David R

@ RickyNotaro-Garcia No, questo ignora gli oggetti nascosti e si blocca su grandi directory. Potrebbe essere possibile che esista una soluzione OK con una dozzina di tubi, ma perché sprecare la vita.
Teque5,

@ RickyNotaro-Garcia Leggi il mio intero commento: il tuo tentativo ignora gli oggetti nascosti e si blocca su grandi directory.
Teque5,

2
ncduè fantastico, cerco sempre questo comando quando dimentico. È veloce, facile da navigare e aiuta a trovare facilmente grandi cartelle. Cordiali saluti, è disponibile anche per macOS e probabilmente tutte le macchine Linux.
Lukas,

..e puoi eliminare le cartelle direttamente ncdupremendo il dtasto
ccpizza il

32

Altri hanno menzionato du, ma vorrei anche menzionare Ncdu , che è una versione di ncurses due fornisce interattività: puoi esplorare direttamente la gerarchia di directory e vedere le dimensioni delle sottodirectory.


26

Il ducomando mostra l'utilizzo del disco del file.

L' -hopzione mostra i risultati in forma leggibile dall'uomo (ad es. 4k, 5M, 3G).

du -h (file name)

22

Tutti gli esempi di cui sopra ti diranno la dimensione dei dati sul disco (ovvero la quantità di spazio su disco utilizzata da un determinato file, che di solito è maggiore della dimensione effettiva del file). Ci sono alcune situazioni in cui questi non ti daranno un rapporto accurato, se i dati non sono effettivamente memorizzati su questo particolare disco ed esistono solo riferimenti agli inode.

Nel tuo esempio, hai usato ls -l su un singolo file, che avrà restituito la dimensione effettiva del file, NON la sua dimensione sul disco.

Se vuoi conoscere le dimensioni effettive del file, aggiungi l'opzione -b a du.

du -csbh .

Sì. Sto usando sdfs che comprime e deduplica i file, quindi non sono riuscito a capire perché riportasse numeri così bassi. La dimensione effettiva dei file con ls può essere trovata usando: du -b
Ryan Shillington,

15

personalmente penso che questo sia il migliore, se non vuoi usarlo ncdu

# du -sh ./*

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

Questo mostra quanto spazio su disco è rimasto sull'unità corrente e quindi ti dice quanto occupa ogni file / directory. per esempio,

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

Cordiali saluti, sembra riportare la dimensione su disco. cioè, sarà probabilmente riempito con il 4KB più vicino.
Aprire il


9

trova ricorsivamente tutti i file nella directory corrente e riassumi le loro dimensioni:

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

Vorrei -not -type dsommare non solo le dimensioni dei file ordinari ( -type f) ma anche le dimensioni dei collegamenti simbolici e così via.
anton_rh,

Questo è fantastico, perché non si ottiene l'overhead necessario per archiviare i file, ma solo la dimensione dei file stessi.
bballdave025

9

Ecco una funzione per i tuoi .bash_aliases

# 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
}

uscita campione:

$ 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

per sottodir:

$ dusort .
$ dusort /var/log/


6

Si noti che dustampa lo spazio occupato da una directory sul supporto, che di solito è più grande della dimensione totale di tutti i file nella directory, poiché dutiene conto della dimensione di tutte le informazioni ausiliarie archiviate sul supporto per organizzare la directory in conformità con il formato del file system.

Se il file system è comprimibile, è possibile che venga generato un dunumero persino inferiore rispetto alla dimensione totale di tutti i file, poiché i file possono essere compressi internamente dal file system e quindi occupano meno spazio sul supporto rispetto alle sole informazioni non compresse che contengono. Lo stesso se ci sono file sparsi.

se nella directory sono presenti collegamenti fissi, è dupossibile che vengano stampati anche valori più piccoli perché diversi file nella directory fanno riferimento agli stessi dati sul supporto.

Per ottenere la dimensione totale semplice di tutti i file nella directory, è possibile utilizzare la seguente espressione shell a una riga (presupponendo un sistema GNU):

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

o anche più breve:

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

Somma solo le dimensioni di tutti i file non di directory nella directory (e le sue sottodirectory ricorsivamente) una per una. Si noti che per i collegamenti simbolici, riporta la dimensione del collegamento simbolico (non del file a cui punta il collegamento simbolico).


5

Puoi usare

du -sh directory/

e

du -sh filename

per conoscere lo spazio occupato dalla cartella o dal file.

df -h

mostrerà l'utilizzo del disco in formato leggibile dall'uomo -h lo fa.

C'è anche un programma basato su gui chiamato Disk Usage Analyzer.


5

Ecco uno script POSIX che funzionerà con:

  • Un file
  • File
  • Una directory
  • Elenchi
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.