IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Garder le fichier le plus récent et non vide d'un répertoire


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Garder le fichier le plus récent et non vide d'un répertoire
    Bonjour

    Je cherche à ne garder que le fichier le plus récent s'il n'est pas vide.
    Cette opération sera faite dans plusieurs répertoires différents.

    J'ai déjà fait un code "fonctionnel" mais j'aimerais votre avis.
    Est-il possible de se passer de la commande ls ? Je pensais à utiliser la commande find à la place mais il peut y avoir des fichiers cachés donc je sèche ...
    Comment ne garder que le fichier le plus récent au lieu de simplement supprimer le plus ancien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
     
    rep="/mon_repertoire"
    liste_rep="rep1 rep2"
    for sous_rep in $liste_rep
    do
      nombre=$(ls "$rep/$sous_rep" | wc -l)
      if [ $nombre -gt 1 ]
      then
        fichier_ancien=$(ls -rt "$rep/$sous_rep/" | head -1)
        fichier_recent=$(ls -rt "$rep/$sous_rep/" | tail -1)
        if [ -s "$rep/$sous_rep/$fichier_recent" ]
        then
          echo "Le fichier recent n'est pas vide. Suppression de $fichier_ancien"
          rm "$rep/$sous_rep/$fichier_ancien"
        else
          echo "Le fichier recent est vide. Suppression de $fichier_recent"
          rm "$rep/$sous_rep/$fichier_recent"
        fi
      fi
    done
     
    exit 0

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    Bonjour,

    Est-il possible de se passer de la commande ls ?
    le premier est facilement éludable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre=$(ar=( $rep/$sous-rep/* ); echo ${#ar[@]})
    les autres je les laisserais comme ça.
    je passerais peut-être par tail systématiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier_ancien=$(ls -t "$rep/$sous_rep/" | tail -1)
    ?

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    Avec find, tu ne peux pas définir l'ordre d'affichage de tes fichiers, sinon la pattern pour ne pas prendre en compte les fichiers cachés est -name "[^.]*"Un autre point concernant ton script, il ne faudrait pas que dans l'un des répertoires que tu vérifies il y ait autre chose que des fichiers réguliers comme par exemple un répertoire...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci à tout les deux.

    Effectivement, utiliser le tail à chaque fois est mieux. Besoin de lunettes pour le voir ...

    find affiche bien les fichiers dans l'ordre alphabétique ?
    Si oui avec l'astuce pour ne pas lister les fichiers caché ce serait bon (vu qu'il n'y a que l'horodatage qui change)

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    Citation Envoyé par ecatomb Voir le message
    find affiche bien les fichiers dans l'ordre alphabétique ?
    nop, il affiche dans l'ordre où il les trouve, il m'est souvent arrivé de devoir | sort derrière, et surtout de préciser devant find un encodage "neutre" du genre LC_ALL=C find (...) | sort

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Non, find n'affiche pas par ordre alphabétique, il affiche par ordre de position physique dans le répertoire.
    Si tu effaces le fichier qui est à la position n, le prochain fichier qui sera créé se retrouvera à cette position et donc find t'affichera le fichier nouvellement créé à la place du fichier qui a été effacé (quelque soit le nom qu'il porte).

  7. #7
    Invité
    Invité(e)
    Par défaut
    Très bien.
    Merci à tous pour ces précisions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Garder les x fichier les plus récents
    Par Papy_Guik dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/10/2009, 08h38
  2. Comment garder les dates les plus récentes?
    Par nikobell dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/06/2007, 10h06
  3. récupérer le fichier le plus récent
    Par kifouillou dans le forum Langage
    Réponses: 24
    Dernier message: 26/01/2007, 00h04
  4. Fichiers le plus récent en BATCH
    Par nolan76 dans le forum Windows
    Réponses: 5
    Dernier message: 03/08/2006, 14h25
  5. Réponses: 2
    Dernier message: 12/03/2006, 23h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo