risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

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

1142
Abdul Al Hazred

du -sh file_path

Spiegazione

  • du (d isc sage) stima lo spazio su file_path
  • Le opzioni -sh provengono 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
    
1585
sam

Basta usare il comando du:

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.

È possibile utilizzare il comando df per conoscere lo spazio libero nel filesystem contenente la directory:

df -h .
347
Pacifist

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

212
Chrispie

du può 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 usa ncdu.

ncdu

È possibile ottenere riepiloghi per cartella facilmente consultabili.

77
Teque5

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

35
Tblue

Il comando du mostra l'utilizzo del disco nel file.

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

du -h (file name)
28
jackotonye

Tutti gli esempi sopra ti diranno la dimensione dei dati su disco (cioè la quantità di spazio su disco che utilizza 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 .
24
Andy Foster

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

# du -sh ./*
17
ConnerMan
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
16
mpen

I so questo comando come root :

Sudo ls -1d */ | Sudo xargs -I{} du {} -sh && Sudo du -sh
10

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}'
10
Leon Chang

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/
10
feldversuch

Un'altra variante:

du -h --max-dep=1
9
0x8BADF00D

Ecco uno script POSIX che funzionerà con:

  • Un file
  • File
  • Una directory
  • Elenchi
ls -A -R -g -o "[email protected]" | awk '{n1 += $3} END {print n1}'
7
Steven Penny

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

Se il file system è comprimibile, allora du potrebbe generare un numero persino inferiore rispetto alla dimensione totale di tutti i file, poiché i file potrebbero essere compressi internamente dal file system e quindi occupare meno spazio sul supporto rispetto alle semplici informazioni non compresse contengono. Lo stesso se ci sono file sparsi.

se nella directory sono presenti collegamenti fissi, allora du può stampare 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 (assumendo un 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).

6
anton_rh

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.

Esiste anche un programma basato su gui chiamato Disk Usage Analyzer.

6
arupgsh