Du - script - Solaris

De UnixManiax
Aller à la navigation Aller à la recherche


Quand un montage commence à saturer, la commande "du" est d'un grand secours pour voir quels sont les répertoires qui consomment le plus d'espace disque.

Pour ne pas prendre en compte les sous-arborescences qui appartiennent à un autre point de montage, on va utiliser "du -x" sous Linux ou "du -d" sous Solaris. Par exemple, si on veut savoir qui consomme le plus dans /var, sachant que /var/tmp est séparé (et donc ne nous intéresse pas), on va taper "du -shx /var" sous Linux ou "du -shd /var" sous Solaris.

Mais cela va nous donner uniquement la valeur de /var, et pas tous les sous-répertoires. Si on enlève le "-s", alors on va avoir tous les répertoires et fichiers inclus, et ça risque de vite devenir illisible. Si on veut juste avoir les sous-répertoires de niveau 1, sous Linux, on va taper "du -shx /var/*". Mais sous Solaris, si on tape "du -shd /var/*", il va parcourir tous les sous-répertoires de /var/ (y compris /var/tmp) et leur appliquer le du -shd. Ce fonctionnement peut paraître logique, mais du coup, nous n'avons pas ce que nous voulons. Il n'y a pas d'option sous Solaris pour avoir ce qu'on veut.

Voici donc, ci-dessous, un petit script qui permet de voir ce qu'on veut.

#!/usr/bin/bash

usage() {
    echo ""
    echo "Prints disk usage of each subdirectory of \"/directory\" on the same mountpoint."
    echo "Usage: $0 /directory"
    echo ""
}

if [ $# -ne 1 ]
then
    echo "Error: wrong number of arguments."
    usage
    exit 1
fi

DIR="$1"

for i in $(ls -1 "$DIR")
do
    RESULT=$(df -h "$DIR/$i" |tail -1 |awk '{print $NF}')
    RESULT_DIR=$(df -h "$DIR" |tail -1 |awk '{print $NF}')
    if [ "${RESULT}" != "${RESULT_DIR}" ]
    then
        :
    else
        du -skd "$DIR/$i" |sort -n
    fi
done