Script

freddelyon -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
salut!! j'ai installe un serveur ftp pour la videosurveillance, je souhaite faire un script pour gerer mon espace de disque la ou sera stocke les images et notamment me garder les 50 dernieres images, afin de ne pas saturer mon disque. peut etre kelqu'un pouvait venir a mon aide pour ce script. A tres bientot.
Configuration: Windows XP
Firefox 2.0.0.3

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    #!/bin/bash
    rep='/mnt/home/lami20j/trash/images'
    total=$(ls -1c $rep | wc -l)
    for fic in $(ls -1c $rep | tail -n $(($total - 50)));do rm -v ${rep}/$fic;done
    

    0
  2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    [!edit: ls -1t et non ls -1r]

    Bonsoir,

    J'ai pas trop gratté, mais une méthode simple (ne nécessitant pas de grosse commandes, fichiers temporaire, etc) serait de commencer par déplacer l'integralité des fichier dans un répertoire (mettons tmp) puis de les lister par date décroissante (ls -1r tmp) de ne conserver que les 50 premier (head -50) et de les déplacer dans le répertoire d'origine et enfin de supprimer ce qu'il y a dans tmp.

    Du coup, le script pourrait avoir cette tronche:
    #!/bin/sh
    mv *jpg tmp/
    ls -1t tmp/* | head -50 |xargs -i file mv file .
    rm -rf tmp/*
    A tester dans un environnement des tests (pas de fichiers importants quoi) a améliorer sans doute selon ce qu'est censé contenir le répertoire de travail, en utilisant des chemin absolu, etc.

    @+
    0
  3. fredelyon
     
    Merci, c'etait pas moi.
    Bonne journee.
    @+
    0
  4. Pascaldelyon69
     
    salut!!
    Excusez moi, pourriez me donner la precision sur le
    for fic in $(ls -1c $rep | tail -n $(($total - 50)));do rm -v ${rep}/$fic;done.
    Que represente fic, car il me demande le message $(ls -lc $rep | wc -l) -50: syntax error: operand expected (error token is "$(ls -lc $rep | wc -l) -50")
    J'ai mis les deux quotes en vain.
    Bonne journnee.
    A tres bientot
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    affiche ton script complet et mets les balises code
    fic c'est une variable qui sera rempli avec le nom de fichier
    0
  7. Pascaldelyon69
     
    Au fait, j'ai ecrit ceci,

    #! /bin/bash
    rep='/DATASAVE/'
    total='$(ls -lc $rep | wc -l)'
    for fic in (ls -lc $rep | tail -n $(($total -50)));
    do
    rm -v
    ${rep}/$fic;
    done
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Dans ta formule "($total -50)", mets un espace entre le "signe moins" (-) et "50" :
      ($total - 50)
      ;-))
      0
    2. Pascaldelyon69
       
      salut!!
      Excuser moi, j'ai ce message
      rm: opérande manquante
      Pour en savoir davantage, faites: « rm --help ».
      SCRIPT_ROULEMENT.sh: line 7: /DATASAVE//(ls: Aucun fichier ou répertoire de ce type).
      Si je veux conserver les images des 60 derniers jours par rapport à la date du jour. Quelles sont les modifs a faire.
      Merci
      0
    3. Pascaldelyon69
       
      Help please, est ce quelqu'un pouvait m'eclaircir sur mon probleme.
      # script qui conserve les images des 60 derniers jours par rapport à la date du jour.
      Merci bonne journee.
      0
  8. poumiZ Messages postés 103 Statut Membre 10
     
    Bonjour,
    au moins 2 erreurs dans ton script:

    total='$(ls -lc $rep | wc -l)' --> enlève les quotes
    for fic in (ls -lc $rep | tail -n $(($total -50))); --> mets $ devant la parenthèse ouvrante: $(...

    Peut-être une 3è: rm -v à mettre sur la même ligne que le fichier à supprimer ...
    0
    1. Fred
       
      salut!!
      Merci bien pour les remarques, vous aurez pas une idee pour faire un script pour
      # script qui conserve les images des 60 derniers jours par rapport à la date du jour.
      Merci bonne journee.
      A bientot
      0
    2. poumiZ Messages postés 103 Statut Membre 10
       
      la solution find me plaît pas mal:
      find $MON_REPERTOIRE -mtime +60 -exec rm -print {} \;

      Pour être sûr de ton coup, fais un petit test en remplaçant rm par ls -l

      bye
      0
    3. poumiZ Messages postés 103 Statut Membre 10 > poumiZ Messages postés 103 Statut Membre
       
      pour affiner tes critères, tu peux rajouter type -f et -name "mes_fic*" soit:
      find $MON_REPERTOIRE -type f -name "debut_de_nom_files*" -mtime +60 -exec rm -print {} \;
      0
    4. Fred > poumiZ Messages postés 103 Statut Membre
       
      Salut!!
      Merci bien, je vais le tester lundi car j'ai une station sur windows a la maison soit mon script avec une tronche:

      #! /bin/bash
      find $'/DATASAVE/' -type f -name "image*" -mtime +60 -exec rm -print {} \;
      a la palce de rm je peux d'abord faire une commande ls-l
      Ps: j'aurai des images sous la forme image1.jpg
      Merci bien;
      Bonne soiree.
      0
    5. bob031 Messages postés 8228 Statut Membre 473 > Fred
       
      Salut,
      Ps: j'aurai des images sous la forme image1.jpg
      alors tu peux préciser le format des fichiers :
      find $'/DATASAVE/' -type f -name "image*.jpg" -mtime +60 -exec rm -print {} \; 


      :-))
      0