du command non analizza le directory nascoste


25

Voglio stimare la quantità di spazio su disco utilizzata da una directory usando il seguente comando.

du -sh dir_name

che non calcola le directory nascoste. Nella pagina man di du non ci sono informazioni al riguardo. Come calcolare la quantità di spazio su disco utilizzata dalle directory inclusi i file nascosti.

Risposte:


13

In realtà lo fa, ecco la prova:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

L' -aopzione viene utilizzata per mostrare esplicitamente quali file sono stati contati.

Stai usando du *?


3
+1 per... you maybe using "du *" ?
sehe

2
Non sto usando "du *". Ho dimenticato di menzionare nella domanda che ho bisogno del riepilogo totale. quindi se uso sia -a che -s come in du -as ricevo un messaggio di errore che dice "du: non posso riassumere e mostrare tutte le voci". Questo è un problema. L'altra cosa è che anche con du -ai riesco a vedere solo i file di primo livello. cioè impossibile vedere i file all'interno delle directory nascoste.
Talespin_Kit,

1
Ho appena aggiunto -a per mostrare tutti i file contati, ma non aggiungere quel flag, influisce solo sulla visualizzazione, non sui totali. Ti ho mostrato un contro-esempio che vengono invece contate le directory nascoste.
stivlo,

1
ora ho trovato il problema. Il problema era che la directory nascosta era un collegamento simbolico, quindi ho dovuto usare "du -Lsh dir_name". Grazie.
Talespin_Kit,

1
ah, vedo, felice che tu l'abbia trovato, evviva.
stivlo,

53

Questo comando mostra la dimensione riepilogativa delle directory nascoste

du -hs .[^.]*


1
Questo è esattamente quello che stavo cercando, grazie :)
Nikana Reklawyks il

questa è la soluzione corretta
3pns il

sarebbe fantastico se tu potessi spiegare un po 'la magia che c'è dietro. aiuterebbe a formare una risposta che includa file e directory sia nascosti che non nascosti.
kumetix,

13

Il comando corretto è: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *, come indicato in un'altra risposta, non è corretto se si desidera elencare tutti i file e le sottodirectory (inclusi quelli nascosti).

Esempio :

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

Perché si ducomporta così? Perché usi -squel riassunto del risultato e che tutti i file e le sottodirectory sono figli di .questo du -hsnon li elenca!


11

Cordiali saluti, per stimare la dimensione occupata da varie directory, è molto meglio usare ncdu

Puoi navigare nella GUI di ncurses tra varie directory e mostrerà le dimensioni di ciascuna directory. Se sto usando du, dovrei eseguire il comando du per ogni directory che voglio controllare per quale può essere ingombrante. È possibile ordinare le directory in base alle dimensioni occupate anche nella GUI di ncurses.


1
Modifica la tua risposta per indicare perché ritieni che ncdu sia "molto meglio". La pagina collegata in realtà non dice altro al di fuori che è una versione di ncurses di du. A parte un metodo di visualizzazione più elaborato, non vi è alcuna indicazione evidente di alcuna differenza funzionale.
Dave Sherohman,

Penso che la possibilità di regolare dinamicamente la tua query sia un enorme vantaggio. Posso eseguire ncdu su ~, sapere quali directory utilizzano più spazio e quindi immergermi direttamente in quelle. Ti dà anche il dlegame per eliminare le directory, in modo da poter ripulire direttamente dall'interfaccia.
user88974

5

Lo fa e non lo fa. Esempio:

Nella home directory: (esiste un solo utente)

du -sh /home/*
2.6G    /home/user

nella directory utente: (enorme differenza tra le somme)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

e il motivo è:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du calcolerà le directory nascoste scendendo nelle sottodirectory, ma nella directory corrente il * semplicemente non corrisponde al modello .directory_name, quindi gli elementi nascosti della directory corrente verranno omessi.

Mi ci è voluto del tempo per capire, e come Shadyabhi raccomanda sarebbe stato ovvio se avessi usato NCU.


1

Il comando corretto è: du -hs .* *


Alcune informazioni aggiuntive renderebbero questa una risposta accettabile.
Ramhound,

1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

Questo ti dà:

  • Dimensione dei file / directory nascosti
  • Dimensioni di file / directory non nascosti
  • Grande dimensione totale della directory corrente

Inoltre ordina l'output per semplificare la visualizzazione di ciò che è il più grande. Ho anche reso questo un alias nel mio ~/.bash_aliasesfile.

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Ora posso solo eseguire bigper trovare le directory più grandi in una directory e sbigquando ho bisogno delle autorizzazioni sudo.


0
du -ahd1 | sort -hr | head -10

di seguito è la descrizione -ddell'opzione in du --help:

-d, --max-depth = N stampa il totale per una directory (o file, con --all) solo se è N o meno livelli al di sotto dell'argomento della riga di comando; --max-depth = 0 è uguale a --summarize


Sebbene ciò possa aiutare a risolvere il problema, non spiega perché e / o come risolve il problema. Fornire questo contesto aggiuntivo migliorerebbe significativamente il suo valore educativo a lungo termine. Modifica la tua risposta per aggiungere spiegazioni, compresi quali limitazioni e ipotesi si applicano. Grazie.
fixer1234,

0

Questo comando ti aiuterà a controllare l'utilizzo del disco nella directory ed eseguire quanto segue.
"du -sch. [!.] * * | sort -h"

Ecco la demo di come calcolare l'utilizzo del disco di una determinata directory. Ho creato una directory chiamata Du_sh e ho creato due file (uno nascosto da 10 MB e normale da 20 MB) all'interno.

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

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.