Récupérer la taille d'un répertoire

M3t@ -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
ceci n'est pas une question mais un shell que j'ai crée et je veut le partager avec vous j'esper qu'il vous aidera un jour :)
tous les commentaire sont les bienvenu, mais surtout les amélioration ;)

explication:
ce shell récupéré le taille d'un répertoire puis vérifier s'il dépasse une certaine taille (ici 1 Go) il compresse le contenu du répertoire, met le fichier comprimée (le fichier compresser porte le nom de la date de compression) dans /root et enfin il vide le répertoire
utilité:
très utile pour gérer les log sur des serveurs qui sauvegarde beaucoup de logs
-------------------------------------------cut-----------------------------------------------
#!/bin/sh

du -bs /votre_répertoire > /tmp/out.$$
SIZE=`awk '{print $1}' /tmp/out.$$`

if [ $SIZE -gt 1000000000 ]
then

DATE=$(date +%d-%m-%Y-%H-%M)
zip -r /root/${DATE}.zip /votre_répertoire
rm -fr /votre_répertoire/*
echo "logs sauvegarder et espace liberer"
echo "$?"
else
echo "espace suffisant !!!!"
echo "$?"
fi

rm /tmp/out.$$
------------------------------------------------cut-----------------------------

désoler pour les fautes d'orthographe j'ai été précis :*)
Configuration: Windows XP
Firefox 3.5.7

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Merci déjà pour cette contribution.

    Ensuite, pourquoi passer par un fichier temporaire (/tmp/out.$$) ?
    Autant récupérer le résultat directement dans la variable :

    SIZE=$(du -bs /votre_répertoire 2>/dev/null | awk '{print $1})


    Et pour finir, le 'echo "$?"' ne sert à rien, dans la mesure où tu l'affiches après un 'echo "logs sauvegardés et espace libéré"' qui forcément dans ce cas va s'exécuter et donc renvoyer un code retour égal à 0 (vrai) ;-\

    ;-))
    1
    1. M3t@
       
      ok jipicy;
      le 'echo "$?"' je l'avait mais pour être sur que tous va bien ;)

      par contre j'ai tester votre code (il vous manque une ' apré la dernier })
      ---------------------------------cut-----------------------------------
      SIZE=$(du -bs /votre_répertoire 2>/dev/null | awk '{print $1}')
      echo $SIZE
      ---------------------------------cut----------------------------------

      résultat:
      [root@home /]# ./test.txt

      Rien n'est afficher :/
      merci ;)
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > M3t@
         
        Je n'ai rien changé à la commande ci-dessus si ce n'est le chemin vers le répertoire (copier/coller)...

        [tmpfs]$ SIZE=$(du -bs /home/jp 2>/dev/null | awk '{print $1}')
        
        [tmpfs]$ echo $SIZE
        578143309
        
        [tmpfs]$

        ;-\
        0
  2. debianhunter Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   24
     
    Bonjour,

    Merci pour le code. Par soucis de stabilite, il vaudrait mieux ne pas stocker le fichier compresse dans /root, mais dans un repertoire sur une partition separee*. /var est souvent sur une partition separee et est dediee a ce genre de stockage.

    Bonne journee !

    *Pour connaitre les partitions sur le systeme et leur point de montage:
    df
    1
    1. M3t@
       
      de rien debianhunter; merci pour l'info ;)
      0