web-dev-qa-db-fra.com

Qu'est-ce qu'un moyen en ligne de commande pour rechercher des fichiers / répertoires volumineux afin de supprimer et de libérer de l'espace?

Vous recherchez une série de commandes qui me montreront les fichiers les plus volumineux sur un lecteur.

195
Ryan Detzel

Si vous avez juste besoin de trouver des fichiers volumineux, vous pouvez utiliser find avec l’option -size. La commande suivante listera tous les fichiers de plus de 10 Mo ( à ne pas confondre avec 10 Mo ):

find / -size +10M -ls

Si vous souhaitez rechercher des fichiers d'une taille donnée, vous pouvez les combiner avec une recherche de "taille inférieure à". La commande suivante recherche les fichiers entre 10 Mo et 12 Mo:

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

apt-cache search 'disk usage' répertorie certains programmes disponibles pour l'analyse de l'utilisation du disque. Une application qui semble très prometteuse est gt5.

De la description du paquet:

Les années ont passé et les disques sont devenus de plus en plus grands, mais même en cette ère de disque dur incroyablement énorme, l'espace semble disparaître avec le temps. Ce petit programme efficace fournit une liste plus pratique que le par défaut du (1). Il affiche ce qui est arrivé depuis la dernière exécution et affiche la taille du répertoire et le pourcentage total. Il est possible de naviguer dans les répertoires et de les remonter à l’aide des touches de curseur avec un navigateur texte (liens, liens, liens, lynx, etc.)

Screenshot of gt5

Dans la section "packages associés" de gt5 , j'ai trouvé ncdu. De sa description du paquet:

Ncdu est une visionneuse basée sur des cursus. Il fournit une interface rapide et facile à utiliser via le célèbre utilitaire. Il permet de parcourir les répertoires et d'afficher les pourcentages d'utilisation du disque avec la bibliothèque ncurses.

Screenshot of ncdu

266
Lekensteyn

Je viens d'utiliser une combinaison de du et 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

Ensuite, il s’agit de rincer et répéter. Ciblez les sous-répertoires que vous jugez trop volumineux, exécutez la commande correspondante et découvrez la cause du problème.

Remarque: J'utilise l'indicateur -x de du pour limiter les choses à un seul système de fichiers (j'ai un arrangement assez compliqué d'éléments croisés entre SSD et RAID5).

Remarque 2: 2>/dev/null redirige tous les messages d'erreur vers l'oubli. S'ils ne vous dérangent pas, ce n'est pas obligatoire.

32
Oli

Ma solution préférée utilise un mélange de plusieurs de ces bonnes réponses.

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

duarguments:

  • -a pour "tous" les fichiers et les répertoires. Ne le laissez que pour les répertoires
  • -BM pour afficher les tailles en mégaoctets (M) tailles de bloc (B)
  • 2>/dev/null - exclut les messages d'erreur "autorisation refusée" (merci @Oli)

sortarguments:

  • -n pour "numérique"
  • -r pour "reverse" (du plus grand au plus petit)

headarguments:

  • -n 50 pour les 50 premiers résultats.
  • Laissez moresi vous utilisez un nombre plus petit

Remarque: préfixez Sudopour inclure les répertoires auxquels votre compte n'est pas autorisé à accéder.

Exemple montrant les 10 plus gros fichiers et répertoires de/var (y compris le grand total).

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
25
Dan King

la réponse de qbi est correcte mais elle sera très lente s'il y a beaucoup de fichiers, car un nouveau processus ls sera lancé pour chaque élément.

une version beaucoup plus rapide utilisant find sans générer de processus enfants serait d'utiliser printf pour imprimer la taille en octets (% s) et le chemin d'accès (% p)

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

10
kon

Pour afficher (récursivement) les 20 plus grands répertoires du dossier en cours, utilisez la ligne suivante:

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

ou (plus orienté Unix):

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

Pour les 20 plus gros fichiers du répertoire en cours (récursivement):

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

ou avec des tailles lisibles par l'homme:

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

Veuillez noter que -h est disponible pour GNU sortuniquement. Pour le faire fonctionner correctement sous OSX/BSD, vous devez l’installer à partir de coreutilsname__. Ajoutez ensuite son dossier dans votre PATHname__.

Il est donc utile d’avoir ces alias dans vos fichiers rc (à chaque fois que vous en avez besoin):

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

Cela semble être l'application idéale pour find:

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

Cette commande trouvera tous les fichiers du répertoire $DIRECTORY et y exécutera ls -s. La dernière commande imprime la taille allouée d'un fichier plus le nom du fichier. Le résultat est trié numériquement et les cinq dernières entrées sont affichées. En conséquence, vous verrez les 5 plus gros fichiers dans $DIRETORY ou n’importe quel sous-répertoire. Si vous entrez tail -n 1, vous ne verrez que le fichier le plus volumineux.

De plus, vous pouvez jouer beaucoup avec find. Par exemple, vous pouvez rechercher des fichiers dont la taille est inférieure à n jours (-ctime -n) ou qui appartiennent à des utilisateurs spéciaux (-user johndoe).

7
qbi

Lorsque j'ai besoin de libérer de l'espace sur les serveurs, j'utilise cette commande. Il trouve tous les fichiers plus gros que 50 Mo et "du -h" fait une meilleure liste de fichiers et "sort -n" après la liste de tubes crée numericcaly triée par taille.

find / -size +50M -type f -exec du -h {} \; | sort -n
4
zorbon.cz

Par exemple, pour trouver tous les fichiers GB, je voudrais utiliser du et grep, bien que les autres méthodes mentionnées ici semblent également très bien.

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

Vous pouvez aussi vous amuser avec l'option --except que du a.

1
dermen

Essayez Baobab, il vous donne un aperçu graphique des fichiers et des dossiers, vous pouvez voir où se trouvent les porcs de l’espace réel et les supprimer en un clic https://help.ubuntu.com/community/Baobab

1
Oliver Hoffmann

Vous pouvez également trier les fichiers par taille:

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

Il ne trouve que les fichiers et exécute du -h pour chaque fichier, ce qui indique la taille du fichier. Enfin, nous trions la sortie de findname __/duen fonction de la première colonne (au format lisible par l'homme).

Le dernier fichier imprimé est le plus gros.

0
Peregring-lk