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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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)
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    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 358
    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 confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    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 358
    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