Qual è un modo della riga di comando per trovare file / directory di grandi dimensioni per rimuovere e liberare spazio?

169

Cerca una serie di comandi che mi mostrino i file più grandi su un'unità.

    
posta Ryan Detzel 20.04.2011 - 16:01

10 risposte

236

Se hai solo bisogno di trovare file di grandi dimensioni, puoi utilizzare find con l'opzione -size . Il comando successivo elencherà tutti i file più grandi di 10MiB ( da non confondere con 10 MB ):

find / -size +10M -ls

Se vuoi trovare i file tra una certa dimensione, puoi combinarla con una ricerca di "taglia inferiore a". Il prossimo comando trova i file tra 10MiB e 12MiB:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' elenca alcuni programmi disponibili per l'analisi dell'utilizzo del disco. Un'applicazione che sembra molto promettente è gt5 .

Dalla descrizione del pacchetto:

% Bl0ck_qu0te%

Nellasezione"pacchetti correlati" di gt5 , ho trovato ncdu . Dalla sua descrizione del pacchetto:

% Bl0ck_qu0te%

    
risposta data Lekensteyn 20.04.2011 - 16:16
30

Uso solo una combinazione di du e sort .

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

Quindi si tratta di risciacquo e ripetizione . Scegli come target le sottodirectory che ritieni siano troppo grandi, esegui il comando per loro e scopri quali sono le cause del problema.

Nota: uso du % s -x flag per mantenere le cose limitate a un filesystem (ho un arrangiamento piuttosto complicato di cose incrociate tra SSD e RAID5).

Nota 2: 2>/dev/null reindirizza eventuali messaggi di errore in oblio. Se non ti infastidiscono, non è obbligatorio.

    
risposta data Oli 20.04.2011 - 16:30
19

La mia soluzione preferita utilizza un mix di molte di queste buone risposte.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

% argomenti di co_de%:

  • du per file e directory "tutti". Lascia fare solo per le directory
  • -a per produrre le dimensioni in blocchi di megabyte (M) (B)
  • -BM - esclude i messaggi di errore "permesso negato" (grazie a @Oli)

% argomenti di co_de%:

  • 2>/dev/null per "numerico"
  • sort per "reverse" (dal più grande al più piccolo)

% argomenti di co_de%:

  • -n per i primi 50 risultati.
  • Lasciare -r se si utilizza un numero più piccolo

Nota: prefisso con head per includere le directory a cui il tuo account non ha il permesso di accedere.

Esempio che mostra i primi 10 file e directory più grandi in / var (incluso il totale generale).

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache
    
risposta data Dan King 04.07.2015 - 01:24
8

La risposta di qbi è corretta ma sarà molto lenta quando ci sono molti file poiché inizierà un nuovo processo ls per ciascun elemento.

una versione molto più veloce usando find senza generare figli processi sarebbe usare printf per stampare la dimensione in byte (% s) e il percorso (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries

    
risposta data kon 16.11.2011 - 13:55
8

Per visualizzare le directory più grandi nella top 20 (in modo ricorsivo) nella cartella corrente, usa il seguente one-liner:

du -ah . | sort -rh | head -20

o (più orientato Unix):

du -a . | sort -rn | head -20

Per i primi 20 file più grandi nella directory corrente (in modo ricorsivo):

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
% Bl0ck_qu0te%

Quindi questi alias sono utili per i 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'
    
risposta data kenorb 05.03.2015 - 15:17
6

Questa sembra l'applicazione perfetta per find :

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Questo comando troverà tutti i file nella directory $DIRECTORY ed eseguirà ls -s su di essi. L'ultimo comando stampa la dimensione allocata di un file più il nome del file. Il risultato viene ordinato numericamente e vengono visualizzate le ultime cinque voci. Pertanto, come risultato, vedrai i 5 file più grandi in $DIRETORY o qualsiasi sottodirectory. Se inserisci tail -n 1 vedrai solo il file più grande.

Inoltre puoi giocare molto con find . Ad esempio, puoi cercare file più giovani di n giorni ( -ctime -n ) o che appartengono a utenti speciali ( -user johndoe ).

    
risposta data qbi 20.04.2011 - 16:26
3

Quando ho bisogno di liberare più spazio sui server, utilizzo questo comando. Trova tutti i file più grandi di 50 MB e "du -h" crea un elenco migliore di file e "ordina -n" dopo che la lista di pipe è stata ordinata numericamente per dimensione del file.

find / -size +50M -type f -exec du -h {} \; | sort -n
    
risposta data zorbon.cz 11.10.2014 - 22:40
1

Prova Baobab, ti offre una panoramica grafica di file e cartelle, puoi vedere dove sono gli hog dello spazio reali ed eliminarli con un solo clic link

    
risposta data Oliver Hoffmann 29.01.2013 - 12:47
1

Per trovare tutti i file GB, ad esempio, userei du e grep, anche se anche gli altri metodi menzionati qui sembrano grandi.

du -h -a /dir | grep "[0-9]G\b"  

Puoi anche essere fantasioso con l'opzione --except che du ha.

    
risposta data dermen 11.06.2013 - 21:04
0

Puoi anche ordinare i file per dimensione:

find . -type f -exec du -h {} \; | sort -k1 -h

Trova solo file ed esegue du -h per ogni file, che mostra la dimensione del file. Infine, ordiniamo l'output di find / du in base alla prima colonna (in formato leggibile dall'uomo).

L'ultimo file stampato è il più grande.

    
risposta data Peregring-lk 08.09.2016 - 14:28

Leggi altre domande sui tag