Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script de suppression de dossier

    10 février 2016 à 17:39:09

    Bonjour à tous,

    je viens vers vous aujourd'hui car j'ai besoin de votre aide pour réaliser un petit script d'effacement de dossier en bash.

    Je m'explique :

    Dans mon projet, je possède un dossier MailsAttachment, dans celui-ci nous retrouvons un dossier pour chaque utilisateur de mon site, numéroté de 1 à n (n étant le dernier utilisateur donc). Dans chacun de ces dossiers utilisateurs, nous retrouvons un dossier pour chaque mail ouvert, qui contient par exemple les fichiers joints au mail.

    Je souhaite donc mettre en place une crontask qui exécuterai ce script toutes les 24H, ce script aurai donc pour effet de supprimer le dossier des mails de chaque utilisateurs à partir du moment où ce dossier existerait depuis plus de 24H.

    Je résume :

    Exemple d'arborescence

    >MailsAttachment

        >1    -----> correspond au dossier du premier utilisateur

            >1  -----> correspond au dossier temporaire du mail le plus ancien qui n'a pas encore dépassé les 24H

            >2

            >3

            >4  -----> correspond au dossier temporaire du mail le plus récent qui n'a pas encore dépassé les 24H (le plus récent donc)

        >2   -----> correspond au dossier du deuxième utilisateur

            >1  -----> correspond au dossier temporaire du mail le plus ancien qui n'a pas encore dépassé les 24H

            > ...

            >n  -----> correspond au dossier temporaire du mail le plus récent qui n'a pas encore dépassé les 24H

       >3   -----> correspond au dossier des mails temporaire du dernier utilisateur

    Nous avons donc ici 3 utilisateurs, le premier utilisateur possède 4 dossiers temporaires correspondants donc aux 4 derniers mails qu'il a reçu datant de moins de 24H. Le deuxième utilisateur possède n dossier de mails qu'il a reçu dans les dernières 24H, etc etc. Ceci est un exemple bien sûre, dans la réalité nous retrouverons beaucoup plus d'utilisateurs ainsi que beaucoup plus de mails par utilisateurs.

    Le script devrait donc parcourir le dossier de chaque utilisateurs, et supprimer dans ce dossier les dossiers qui existent depuis plus de 24H.

    Cela aura donc pour effet de garder en mémoire les pièces jointes des mails 24H seulement, au delà de ça elles seront supprimées.

    Je m'occupe de toute la partie crontask, seulement ayant très très peu de connaissance en Bash j'avoue ne pas être capable de réaliser ce script, et je pense que pour quelqu'un qui connait bien le langage cela devrait être largement à porté (dû moins je pense).

    Bonne fin de journée et merci à vous

    -
    Edité par oxander25 10 février 2016 à 17:39:27

    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2016 à 23:15:26

      Vous avez de la chance je suis de très bonne humeur :p :D
      #! /bin/bash
      ########################################################
      # Auteur : Fouad JADOUANI 
      # Mail : <fouad.j at live dot fr>
      # Website : jfouad.com
      ###############
      
      # c'est juste une petite astuce pour ne pas avoir de probleme avec les noms de fichier ou il y a un espace
      OLD_IFS=$IFS;
      IFS=$'\n'
      
      directory="/home/fouad/MailsAttachment";	# 
      oneDay="86400"				# 24*60*60 nbr second day
      
      cd $directory
      
      # browse MailsAttachment
      for user_directory in `ls -A $directory` ; do
      
      	# get folder in MailsAttachment
      	if [ -d $user_directory ]; then
      
      		p1=${directory}/${user_directory} # take /home/fouad/MailsAttachment/k  ∈ (1..n)
      		for file in `ls -A $p1` ; do
      
      			p2=${p1}/${file}; # take /home/fouad/MailsAttachment/k/attachJ
      
      			lastModif=`expr $(date +%s) - $(date +%s -r "$p2")`;
      
      			if [ "$lastModif" -gt "$oneDay" ]; then
      				echo "$p2";
      				rm -ir $p2
      			fi
      
      		done
      
      	fi
      
      done
      
      IFS=$OLD_IFS


      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2016 à 23:37:56

        juste une petite astuce

        : ne pas utiliser ls, mais le développement de chemins.

        expr n'est pas utile : le shell peut faire de l'arithmétique sur des entiers : oneDay=$((24*60**2)), par exemple.

        non testé :

        find $srcDir -mindepth 3 -maxdepth 3 -type d -mtime 1 #-delete


        enlever la marque de commentaire si ça affiche bien ce que tu veux supprimer.

        -
        Edité par dantonq 11 février 2016 à 23:38:10

        • Partager sur Facebook
        • Partager sur Twitter

        Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          13 février 2016 à 14:30:33

          Un grand merci à vous pour votre réponse ! Je vais tester tout ça :)
          • Partager sur Facebook
          • Partager sur Twitter

          Script de suppression de dossier

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown