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 :

Création fichiers suffixés par incrément au fur et à mesure


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut Création fichiers suffixés par incrément au fur et à mesure
    Bonjour,

    Je lance un script qui créé un fichier nommé FILE.txt, si je relance le script une nouvelle fois le nouveau FILE.txt va écraser l'ancien.

    J'aimerais garder au moins 5 générations de FILE.txt, en suffixant le nom par des chiffres, par exemple :

    FILE.txt : le tout dernier
    FILE_1.txt : l'avant dernier
    FILE_2.txt : l'avant avant dernier

    Comment peut-on coder ça ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    declare -i numFILE=1
    declare leFichier="/tmp/monFILE_${numFILE}.txt"
    while [ -f /tmp/monFILE_${numFILE}.txt ];do numFILE=$(($numFILE + 1)); export leFichier="/tmp/monFILE_${numFILE}.txt";done
    > "$leFichier"
    Ce n'est peut-être pas le meilleur code, mais je l'ai dans un de mes scripts. Et ça marche bien. À chaque lancement, le script détermine le numéro du fichier qui le concerne, et crée ce fichier temporaire nommé avec le numéro. Comme /tmp est vidé à chaque redémarrage, le suffixe sera souvent petit. Ainsi, je peux lancer le script 5 fois de suite, sans confondre les fichiers temporaires des 5 instances.

    Si tu veux garder ton nombre dans un cycle, il faudra utiliser le modulo.
    numFILE=$(( (numFILE%5) + 1 ))
    Ceci donnera 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    MERCI

    J'ai codé ceci :

    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
    #!/bin/bash
     
    DOSSIER=/home
     
    cd $REP
     
    rm $DOSSIER/TOTO.txt
    touch $DOSSIER/TOTO.txt
     
    echo "SALUT c est un test" >> $DOSSIER/TOTO.txt
     
    declare -i numFILE=1
     
    declare Fichier="$DOSSIER/TOTO_${numFILE}.txt"
     
    while [ -f $DOSSIER/TOTO_${numFILE}.txt ]
            do numFILE=$(( (numFILE%5) + 1 ))
            export Fichier="$DOSSIER/TOTO_${numFILE}.txt"
    done > "$Fichier"
    Voici ce qui est créée, je relance et ça ne bouge pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -rw-r--r-- 1 kevin kevin   20 Oct  1 15:14 TOTO.txt
    -rw-r--r-- 1 kevin kevin    0 Oct  1 15:14 TOTO_1.txt
    J'ai dû rater quelque chose?

    J'aimerais mettre toutes les générations au même endroit.

    Merci pour ton aide précieuse.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    il y a une règle pour le nommage des variables :
    les variables utilisateur doivent ne pas être tout en majuscules, parce que c'est réservé, par convention, aux variables d'environnement (HOME, PWD...).
    les variables utilisateurs peuvent panacher minuscules et majuscules : maVariableAmoi.

    il est important que tu écrives un algorithme AVANT de coder.
    cet algorithme doit pouvoir servir de commentaires.
    ça te permettrait de savoir ce que tu fais, quand, et où ça mène.

    tu verrais ainsi, que dans ton code, à aucun moment tu ne crées de fichiers.
    tu rediriges rien à la fin de la boucle vers un $Fichier, c'est-à-dire /chemin/fichier_1.txt.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Merci à toi pour ces conseils.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    set -x
     
    Rep=/home
    cd $Rep
     
    declare -i numFILE=1
    declare Fichier="$Rep/TOTO_${numFILE}.txt"
     
    while [ -f $Rep/TOTO_${numFILE}.txt ]; do numFILE=$(( (numFILE%5) + 1 )); export Fichier="$Rep/TOTO_${numFILE}.txt"; done
     
    echo "SALUT c est un test" >> $Fichier
    echo "... sur la generation de fichiers" >> $Fichier
    Ca fonctionne déjà mieux mais pas dans le bon sens : si je le lance 3 fois le dernier fichier créé est le numéro 3 et pas le numéro 1.
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Avant de répondre, je voudrais quand même souligner l'absurdité de ce que tu cherches à faire. Si tu reprends ton script dans 6 mois, ou si quelqu'un le reprend à ta suite, on ne comprendra pas pourquoi les numéros vont dans l'ordre inverse. Généralement, le fichier le plus vieux a le suffixe le plus petit.

    Si tu insistes, il suffit de faire tourner le compteur dans l'autre sens.
    x-1=x+4 [5]
    numFILE=$(( (numFILE+3)%5 + 1 ))
    Ce qui donne 5 4 3 2 1 5 4 3 2 1 5 4 ...

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

Discussions similaires

  1. création de variable par incrémentation
    Par Boboulot dans le forum SAS Base
    Réponses: 3
    Dernier message: 10/06/2020, 22h36
  2. Réponses: 18
    Dernier message: 04/11/2015, 14h54
  3. Création fichier QVD et incrémentation
    Par lyonnaisdu26 dans le forum QlikView
    Réponses: 2
    Dernier message: 22/09/2011, 11h10
  4. [VBA] Création fichier Word par Access via VBA
    Par MadSquirrel dans le forum VBA Word
    Réponses: 2
    Dernier message: 24/09/2006, 15h32
  5. Liste a incrémenter au fur et à mesure des choix
    Par Mat_DZ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/08/2006, 17h19

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