Un script shell pour trouver les dossiers volumineux

Dernièrement, j'arrivais à court de place sur ma partition /home il me semblait pourtant que je n'avais pas grand chose de volumineux et comme trouver ce qui occupe beaucoup d'espace est long et fastidieux, j'ai écrit un petit script pour se faciliter la tâche. Ce script liste les dossiers contenus dans un répertoire donné à un niveau donné faisant plus de 1,10,100,1000...unité. Voici donc wimfs.sh (Where is my free space :) :

 

#! /bin/sh
# Trouve les dossiers les plus volumineux
# à un niveau donné en indiquant la longueur de la taille minimale
# par exemple 3 pour avoir tout ce qui est gros que 100 UNITE
 
# Valeurs par défaut
LEVEL=1    # -l
DIR=`pwd`  # -d
SIZEU="m"  # -u
MIN_SIZE=2 # -s
 
# affiche une chaine et termine le script
function print_exit
{
    echo "$1"
    exit $2
}
 
# affiche l'aide
function print_usage
{
    echo "$1 [-l NIVEAU] [-d DOSSIER] [-u UNITE] [-s TAILLE_MINIMALE]"
    echo "  NIVEAU : entier indiquant le nombre de niveau de l'arborescence à descendre, défaut: 1"
    echo "  DOSSIER : dossier racine, défaut répertoire courant"
    echo "  UNITE : m pour Mo, k pour Ko, b pour octet, défaut m"
    echo "  TAILLE_MINIMALE : longueur minimale de la taille, par défaut 2, pour afficher ce qui fait plus de 10 UNITE"
}
 
# options
while getopts "hl:d:u:s:" opt ; do
    case $opt in
        u ) SIZEU=$OPTARG ;;
        l ) LEVEL=$OPTARG ;;
        s ) MIN_SIZE=$OPTARG;;
        d ) DIR=$OPTARG;;
        h ) print_usage $0
            exit 0 ;;
        * ) echo "Mauvais paramètre $opt"
            print_usage "$0"
            exit 1 ;;
    esac
done
 
# Vérifications
[ ! -d "$DIR" ] && print_exit "Le dossier $DIR n'existe pas" 1
[ "$SIZEU" != "b" ] && [ "$SIZEU" != "k" ] && [ "$SIZEU" != "m" ] && print_exit "L'unité ne peut être que b, k, u" 2
[ -z $(echo $LEVEL | egrep '^[0-9]+$') ] && print_exit "Le niveau doit être un entier" 3
[ -z $(echo $MIN_SIZE | egrep '^[0-9]+$') ] && print_exit "La taille minimale doit être un entier" 4
 
# le script ... :)
find $DIR -maxdepth $LEVEL -mindepth $LEVEL -type d -print0 | xargs -0 du -s$SIZEU 2> /dev/null | egrep "^[0-9]{$MIN_SIZE,}" | sort -n

 

Ce script s'utilise assez simplement en indiquant un ou plusieurs paramètres (ils sont tous facultatifs). Il prend aussi en compte les dossiers cachés (ie commençant par un .). Exemples :

 

wimfs.sh -d ~ -l 1 -u m -s 3
# permet de trouver les dossiers faisant plus 100Mo dans le répertoire personnel de l'utilisateur
wimfs.sh -d ~ -l 3 -u k -s 2
# permet de trouver les dossiers faisant plus 10ko au niveau 3 à partir du répertoire utilisateur 
 

 

Ce script illustre l'utilisation de getopts pour analyser la ligne de commande, ainsi qu'une partie des possibilités de find. Le truc amusant c'est que finalement, le script proprement dit tient en une ligne, le reste est surtout du confort pour la vérification des options avec test.

Edit : correction d'erreurs dans la vérification des entiers, merci byzmut.

Tags : Geek, Truc, bash, Ubuntu, Linux, shell

» Commentaires

- konqueror (#63960) par marseillai le 07 Janvier 2007 à 17:03
Je sais que sous gnome c'est chiant d'installer konqueror mais il y a dans celui ci quelque chose de trés pratique pour ce genre de chose :
en sélectionnant dans les types d'affichage le type taille des fichiers on obtient une vue trés précise des gros dossier et on peut se déplacer trés simplement a l'intérieur. Bref on localise trés simplement les gros fichiers et gros dossiers.
- existe déjà ;) (#63961) par Lucas le 07 Janvier 2007 à 17:08
Salut,

Tu peux faire la meme chose avec durep (en console) ou avec filelight et kdirstat (resp. pour GNOME et KDE).
- baobab (#63962) par darkagonik le 07 Janvier 2007 à 17:16
Il y a aussi baobab pour gnome...
Il est installé avec edgy.
Applications -> Accessoires -> Analyseur de l'usage des disques
- Je sais tout ça (#63963) par Damien le 07 Janvier 2007 à 19:43
Enfin pour baobab et Konqueror.
mais c'est tellement plus marrant à faire soit même et en plus je suis encore sous Dapper Drake...
- Whaouu (#63964) par Fafa le 07 Janvier 2007 à 22:28
Whaouu, le jour ou j'arriverai à faire des scripts comme ça, je serai fin heureux. Je me rend que je suis un novice sous linux.

Même s'il existe déjà des outils, c'est tellement plus instructif de le faire soi même plutot que de passer par des clickodrome avec des resultat par forcement aussi pointue.

Merci pour ce script
- du -m | sort -n (#63965) par Jahman le 08 Janvier 2007 à 00:10
Salut,

Pour savoir ce qui prend de la place, j'utilise la commande: "du -m | sort -n"
Ca liste tout les sous repertoires et fichiers courant et retourne leurs tailles en megaoctets qui sont triés avec la commande sort. c'est pratique pour connaitre les fichiers qui prennent de la place.
- ba chez moi, il veut pas (#63966) par byzmut le 08 Janvier 2007 à 08:21
j'ai pas mis le nez dedant, mais quand je le lance (avec ou sans argument), il me dit que le niveau doit être un entier :

fabien@laptux:~$ ./wimfs.sh
Le niveau doit être un entier
fabien@laptux:~$ ./wimfs.sh -d ~ -l 1 -u m -s 3
Le niveau doit être un entier
- meme erreur (#63967) par atlas95 le 08 Janvier 2007 à 10:25
ca me dit que ca doit être un entier :s
- nautilus (#63975) par hells_Dark le 09 Janvier 2007 à 16:32
D'ailleurs, je trouve vraiment dommage qu'il soit impossible d'avoir directement le détail de la taille des dossiers dans nautilus.. obligé de faire clic droit / propriété..
- espace disparu (#63997) par JoAk le 10 Janvier 2007 à 23:55
J'ai un problème sur ma dapper, que ni baobab ni le reste n'a pu résoudre, mais peut être le pourrez vous : il me dit que ma partition / mesure 5.85 Go dont 4.5 occupé...
Or, baobab ou le fameux clic droit de nautilus me permet de trouver en tout et pour tout 2 Go, et les autres sont introuvables ! Une idée ?

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login