2009-07-21 06:54:48 +0000 2009-07-21 06:54:48 +0000
134
134
Advertisement

Utilità Linux per trovare i file/directory più grandi

Advertisement

Sto cercando un programma che mi mostri quali file/directory occupano più spazio, qualcosa come:

74% music
 \- 60% music1
 \- 14% music2
12% code
13% other

So che è possibile in KDE3, ma preferirei non farlo - KDE4 o la linea di comando sono preferiti.

Advertisement

Risposte (16)

200
200
200
2010-07-07 15:31:29 +0000

Io uso sempre ncdu. È interattivo e molto veloce.

131
131
131
2012-03-06 19:56:10 +0000

Per trovare i 10 file più grandi (linux/bash):

find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

Per trovare le 10 directory più grandi:

find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

L'unica differenza è -type {d:f}.

gestisce i file con spazi nei nomi, e produce in output dimensioni di file leggibili dall'uomo. Il file più grande viene elencato per ultimo. L'argomento di tail è il numero di risultati che vedete (qui i 10 più grandi).

Ci sono due tecniche usate per gestire gli spazi nei nomi dei file. La find -print0 | xargs -0 usa delimitatori null al posto degli spazi, e la seconda xargs -I{} usa newline al posto degli spazi per terminare gli elementi di input.

esempio:

$ find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

  76M ./snapshots/projects/weekly.1/onthisday/onthisday.tar.gz
  76M ./snapshots/projects/weekly.2/onthisday/onthisday.tar.gz
  76M ./snapshots/projects/weekly.3/onthisday/onthisday.tar.gz
  76M ./tmp/projects/onthisday/onthisday.tar.gz
  114M ./Dropbox/snapshots/weekly.tgz
  114M ./Dropbox/snapshots/daily.tgz
  114M ./Dropbox/snapshots/monthly.tgz
  117M ./Calibre Library/Robert Martin/cc.mobi
  159M ./.local/share/Trash/files/funky chicken.mpg
  346M ./Downloads/The Walking Dead S02E02 ... (dutch subs nl).avi
37
Advertisement
37
37
2009-07-21 07:19:02 +0000

Per una visione veloce:

du | sort -n

elenca tutte le directory con l'ultima più grande.

du --max-depth=1 * | sort -n

o, di nuovo, evitando il ridondante * :

du --max-depth=1 | sort -n

elenca tutte le directory nella directory corrente con la più grande per ultima.

(il parametro -n per ordinare è richiesto in modo che il primo campo sia ordinato come numero piuttosto che come testo, ma questo preclude l'uso del parametro -h di du poiché abbiamo bisogno di un numero significativo per l'ordinamento)

Altri parametri di du sono disponibili se volete seguire i collegamenti simbolici (l'impostazione predefinita è di non seguire i collegamenti simbolici) o mostrare solo la dimensione del contenuto della directory escludendo le sottodirectory, per esempio. du può anche includere nella lista la data e l'ora in cui ogni file nella directory è stato modificato l'ultima volta.

23
23
23
2009-07-24 04:26:50 +0000

Per la maggior parte delle cose, preferisco gli strumenti CLI, ma per l'uso del disco, mi piace molto filelight . La presentazione è per me più intuitiva di qualsiasi altro strumento di gestione dello spazio che ho visto.

20
Advertisement
20
20
2013-02-18 04:35:03 +0000

Filelight è meglio per gli utenti KDE, ma per completezza (il titolo della domanda è generale) devo menzionare Baobab è incluso in Ubuntu, aka Disk Usage Analyzer:

8
8
8
2009-07-22 10:00:12 +0000

Uno strumento GUI, * KDirStat **, mostra i dati sia in forma di tabella che graficamente. Si può vedere molto rapidamente dove viene usata la maggior parte dello spazio.

Non sono sicuro che questo sia esattamente lo strumento KDE che non volevi, ma penso che dovrebbe comunque essere menzionato in una domanda come questa. È buono e molte persone probabilmente non lo conoscono - io stesso l'ho imparato solo di recente.

5
Advertisement
5
5
2009-07-21 07:06:07 +0000

Una combinazione è sempre il miglior trucco su Unix.

du -sk $(find . -type d) | sort -n -k 1

mostrerà le dimensioni delle directory in KB e ordinerà per dare la più grande alla fine.
Tree-view avrà comunque bisogno di un po’ più di fu… è davvero necessario?

Nota che questa scansione è annidata attraverso le directory, quindi conterà ancora le sottodirectory per le directory più alte e la directory di base . apparirà alla fine come somma di utilizzo totale.

Potete comunque usare un controllo di profondità sul find per cercare ad una profondità specifica.
e, in realtà, essere molto più coinvolti nella scansione… a seconda di ciò che si vuole. Il controllo di profondità di find con -maxdepth e -mindepth può restringere ad una specifica profondità della sotto-directory.


Ecco una variante raffinata per il tuo problema arg-too-long

find . -type d -exec du -sk {} \; | sort -n -k 1
3
3
3
2009-07-21 11:35:45 +0000

Mi piace gt5 . Puoi navigare l'albero e aprire le sottodirectory per scendere più in dettaglio. Usa un browser web in modalità testo, come lynx, per visualizzare i risultati. Installa elinks per ottenere i migliori risultati.

2
Advertisement
2
2
2009-07-21 07:00:04 +0000

Anche se non ti dà un output annidato come quello, prova du

du -h /path/to/dir/

Eseguendolo sulla mia cartella Documenti esce quanto segue:

josh-hunts-macbook:Documents joshhunt$ du -h
  0B ./Adobe Scripts
  0B ./Colloquy Transcripts
 23M ./Electronic Arts/The Sims 3/Custom Music
  0B ./Electronic Arts/The Sims 3/InstalledWorlds
364K ./Electronic Arts/The Sims 3/Library
 77M ./Electronic Arts/The Sims 3/Recorded Videos
101M ./Electronic Arts/The Sims 3/Saves
 40M ./Electronic Arts/The Sims 3/Screenshots
1.6M ./Electronic Arts/The Sims 3/Thumbnails
387M ./Electronic Arts/The Sims 3
387M ./Electronic Arts
984K ./English Advanced/Documents
1.8M ./English Advanced
  0B ./English Extension/Documents
212K ./English Extension
100K ./English Tutoring
5.6M ./IPT/Multimedia Assessment Task
720K ./IPT/Transaction Processing Systems
8.6M ./IPT
1.5M ./Job
432K ./Legal Studies/Crime
8.0K ./Legal Studies/Documents
144K ./Legal Studies/Family/PDFs
692K ./Legal Studies/Family
1.1M ./Legal Studies
380K ./Maths/Assessment Task 1
388K ./Maths
[...]

Poi potete ordinare l'output facendolo passare per sort

du /path/to/dir | sort -n
1
1
1
2013-05-15 21:52:25 +0000

Anche se trovare la percentuale di utilizzo del disco di ogni file/directory è vantaggioso, la maggior parte delle volte conoscere i file/directory più grandi all'interno del disco è sufficiente.

Quindi il mio preferito è questo:

# du -a | sort -n -r | head -n 20

E l'output è come questo:

28626644 .
28052128 ./www
28044812 ./www/vhosts
28017860 ./www/vhosts/example.com
23317776 ./www/vhosts/example.com/httpdocs
23295012 ./www/vhosts/example.com/httpdocs/myfolder
23271868 ./www/vhosts/example.com/httpdocs/myfolder/temp
11619576 ./www/vhosts/example.com/httpdocs/myfolder/temp/main
11590700 ./www/vhosts/example.com/httpdocs/myfolder/temp/main/user
11564748 ./www/vhosts/example.com/httpdocs/myfolder/temp/others
4699852 ./www/vhosts/example.com/stats
4479728 ./www/vhosts/example.com/stats/logs
4437900 ./www/vhosts/example.com/stats/logs/access_log.processed
401848 ./lib
323432 ./lib/mysql
246828 ./lib/mysql/mydatabase
215680 ./www/vhosts/example.com/stats/webstat
182364 ./www/vhosts/example.com/httpdocs/tmp/aaa.sql
181304 ./www/vhosts/example.com/httpdocs/tmp/bbb.sql
181144 ./www/vhosts/example.com/httpdocs/tmp/ccc.sql
1
Advertisement
1
1
2012-09-06 05:27:20 +0000

Ecco lo script che lo fa per voi automaticamente. http://www.thegeekscope.com/linux-script-to-find-largest-files/

Quello che segue è un esempio di output dello script:

**# sh get_largest_files.sh / 5**

[SIZE (BYTES)] [% OF DISK] [OWNER] [LAST MODIFIED ON] [FILE] 

56421808 0% root 2012-08-02 14:58:51 /usr/lib/locale/locale-archive
32464076 0% root 2008-09-18 18:06:28 /usr/lib/libgcj.so.7rh.0.0
29147136 0% root 2012-08-02 15:17:40 /var/lib/rpm/Packages
20278904 0% root 2008-12-09 13:57:01 /usr/lib/xulrunner-1.9/libxul.so
16001944 0% root 2012-08-02 15:02:36 /etc/selinux/targeted/modules/active/base.linked

Total disk size: 23792652288 Bytes
Total size occupied by these files: 154313868 Bytes [0% of Total Disc Space]

***Note: 0% represents less than 1%***

Potreste trovare questo script molto comodo e utile!

1
1
1
2014-05-29 03:39:47 +0000

Per trovare i primi 25 file nella directory corrente e nelle sue sottodirectory:

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

Verranno mostrati i primi 25 file ordinandoli in base alla dimensione dei file tramite il comando piped “sort -nr -k5”.

1
Advertisement
1
1
2015-04-10 12:07:49 +0000

Un'altra alternativa è agedu che suddivide lo spazio su disco per tempo di ultimo accesso, il che rende più facile localizzare i file che sprecano spazio.

funziona anche su un server senza X Windows, servendo pagine web temporanee in modo che l'uso possa essere analizzato a distanza, con grafici. Assumendo che l'indirizzo IP del server sia 192.168.1.101, si può digitare questo sulla linea di comando del server

agedu -s / -w --address 192.168.1.101:60870 --auth basic -R

Questo stampa il nome utente, la password e l'URL con cui si può accedere alla “GUI” e navigare nei risultati. Al termine, terminare agedu con Ctrl+D sul server.

0
0
0
2010-07-07 11:05:40 +0000
du -chs /*

vi mostrerà una lista della directory principale.

0
Advertisement
0
0
2013-08-18 12:36:57 +0000

Per completare un po’ di più la lista, aggiungo il mio analizzatore di utilizzo del disco preferito, che è xdiskusage .

La GUI mi ricorda alcune altre buone vecchie utility X, è veloce e non gonfia, ma si può comunque navigare facilmente nella gerarchia e avere alcune opzioni di visualizzazione:

$ xdiskusage /usr

0
0
0
2015-03-05 13:44:05 +0000

Prova il seguente one-liner (visualizza i 20 file più grandi nella directory corrente):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

o con dimensioni leggibili dall'uomo:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Il secondo comando per funzionare correttamente su OSX/BSD (poiché sort non ha -h), devi installare sort da coreutils.

Quindi questi alias sono utili da avere nei tuoi file rc (ogni volta che ne hai bisogno):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
Advertisement