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 :

Un script pour compresser les fichiers chaque jour automatiquemement


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 40
    Par défaut Un script pour compresser les fichiers chaque jour automatiquemement
    Bonjour tout le monde,

    je suis débutante dans le shell et je dois faire un petit script pour la compression des fichiers

    Pouvez-vous m'aider svp pour que je puisse faire ce script!!

    l'idée est là, mais ça ne marche pas; si vous pouvez corriger svp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    err=${bldred}ERROR${txtrst}
    info=${bldgre}INFO${txtrst}
    warn=${bldylw}WARNING${txtrst}
    datadir="/root/datadir"
     
                    # Compression des fichiers
                    cd ${datadir}/repertoire/ && tar -czf ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz fichier_"$(date +%Y-%m-%d)"*.csv && \
                    echo "${info} : Compression des fichiers 
    ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz"
            else
                    echo -e "$err : erreur";
            fi
            ;;
    Les fichiers à compresser sont :

    fichier_0.csv
    fichier_2.csv
    fichier_3.csv
    fichier_4.csv
    fichier_5.csv
    fichier_6.csv
    fichier_7.csv

    Le but : c'est faire une compression au format tar.gz chaque jour via ce script là


    Merci beaucoup par avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    «ça marche pô»
    tu peux expliciter ?
    y a-t-il des messages d'erreurs ?

    je vois else et fi, sans if; pourquoi ?

    la date devrait être définie dans une variable au début du script.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 40
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    «ça marche pô»
    tu peux expliciter ?
    y a-t-il des messages d'erreurs ?

    je vois else et fi, sans if; pourquoi ?

    la date devrait être définie dans une variable au début du script.
    Effectivement l'erreur c'est else et il reconnait pas le repertoire /root/datadir.

    comment je peux déclarer la date

    pourriez vous m'aidez svp a corriger

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    comment je peux déclarer la date
    à l'aide d'une substitution de commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateHeure=$(date +%Y-%m-%d_%H%M%S)
    et du remplacement des paramètres :
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    «ça marche pô»
    tu peux expliciter ?
    y a-t-il des messages d'erreurs ?

    je vois else et fi, sans if; pourquoi ?

    la date devrait être définie dans une variable au début du script.
    Et pis y a un ;; sans case ni esac et y a pas de shebang.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tar -czf ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz fichier_"$(date +%Y-%m-%d)"*.csv
    Les fichiers à compresser sont :

    fichier_0.csv
    fichier_2.csv
    fichier_3.csv
    fichier_4.csv
    fichier_5.csv
    fichier_6.csv
    fichier_7.csv
    Bonjour
    Manifestement ton script cherche à archiver (et non compresser) des fichiers nommés "fichier_AA-mm-jj.csv" tandis que de l'autre coté tu parles de fichier nommés "fichier_0.csv". Il y a déjà ici une grosse incohérence.

    Tu as le droit d'élargir tes guillemets au nom complet du fichier (sans te limiter à la zone concernée par la commande) => tar -czf "${datadir}/cible/fichier_$(date +%Y-%m-%d_%H%M%S).tgz"...

    Sinon pour la terminologie, tar est une commande destinée à "archiver" un dossier/répertoire. Il se trouve que l'archive créée peut en plus être compressée via l'option z. Mais c'est l'archive qui est compressée et non le fichier d'origine...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    err=${bldred}ERROR${txtrst}
    info=${bldgre}INFO${txtrst}
    warn=${bldylw}WARNING${txtrst}
    datadir="/root/datadir"
    dateHeure=$(date +%Y-%m-%d_%H%M%S)
     
    # Compression des fichiers
    cd ${datadir}/repertoire/ && \
       tar -czf ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz fichier_"$(date +%Y-%m-%d)"*.csv && \
       echo "${info} : Compression des fichiers 
    ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz"

    le but effictivement d'archiver les fichiers dans un tar.gz

    Pouvez vous apporter des rectification a ce malheureux script ??

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    Pouvez vous apporter des rectification a ce malheureux script ??
    Ben déjà on t'a donné pas mal d'infos ; à toi de les appliquer.
    Parce que ce script n'est malheureux que parce qu'il est vraiment écrit n'importe comment. D'ailleurs certains se sont posés quelques interrogations (sous-entendues "qui t'étaient adressées directement") à propos par exemple du "else" sans if et du double point-virgule sans case...esac pour lesquelles tu n'as donné aucune réponse.

    Ce qui m'incite à poser cette question directe: connais-tu les bases ("bases" en souligné pour bien montrer que sans ça tout le reste s'effondre) de la syntaxe shell (surtout des structures de contrôle if...fi/do...done/case...esac) ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 40
    Par défaut
    je connais pas mal de langage mais pas le shell :s

    j'ai enlevé le else en fait .

    là que l'archivage des fichiers en tar.gz

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bonjour Laurine ou Céline ???,

    Si c'est juste de l'archivage one shot, une simple commande tar est suffisant...

    Si tu ne connais pas trop le shell, peux-tu au moins nous préciser sous forme algorithmique les tenants et aboutissants de ce que tu cherche à faire ?

    Cordialement.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    je connais pas mal de langage mais pas le shell :s
    Ca se voit. Mais même sans connaitre le shell, affirmer qu'on doit archiver un fichier nommé "fichier_0.csv" et écrire un script qui archive le fichier "fichier_aa-mm-jj.csv" c'est faire bien peu d'efforts...

    Bon en faisant un mix du script d'origine et des renseignements donnés, voici un truc qui devrait donner de bons résultats...

    Code bash : 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
    24
    25
    26
    27
    28
    #!/bin/bash
     
    # Je laisse ces 3 lignes mais elles sont totalement inutiles
    # Les variables "bldred", "bldgre", "bldylw" et "txtrst" étant indéfinies
    err=${bldred}ERROR${txtrst}
    info=${bldgre}INFO${txtrst}
    warn=${bldylw}WARNING${txtrst}
    # ---------------------------
     
    datadir="/root/datadir"
    archive="$datadir/cible/fichier_$(date +%Y-%m-%d_%H%M%S).tar.gz"
     
    # Création de la liste des fichiers
    for i in $(seq 9)
    do
        liste="$liste fichier_$i.csv"
    done
     
    # Compression des fichiers
    cd "$datadir/repertoire" && \
       tar -cvzf "$archive" "$liste"; status=$?
     
    if test $status -eq 0
    then
        echo "Archivage de $liste dans $archive terminée"
    else
        echo "Erreur dans l'archivage - Archive $archive inutilisable"
    fi

    Tu mets ce script dans le cron et celui-ci se chargera de l'exécuter au(x) bon(s) moment(s)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    le but effictivement d'archiver les fichiers dans un tar.gz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    err=${bldred}ERROR${txtrst}
    info=${bldgre}INFO${txtrst}
    warn=${bldylw}WARNING${txtrst}
    datadir="/root/datadir"
    dateHeure=$(date +%Y-%m-%d_%H%M%S)
     
    # Compression des fichiers
    cd ${datadir}/repertoire/ && \
       tar -czf ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz fichier_"$(date +%Y-%m-%d)"*.csv && \
       echo "${info} : Compression des fichiers 
    ${datadir}/cible/fichier_"$(date +%Y-%m-%d_%H%M%S)".tar.gz"
    Pouvez vous apporter des rectification a ce malheureux script ??
    Il suffit de substituer dateHeure aux formules ressemblant à sa valeur (sauf la première évidemment):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    err=${bldred}ERROR${txtrst}
    info=${bldgre}INFO${txtrst}
    warn=${bldylw}WARNING${txtrst}
    datadir="/root/datadir"
    dateHeure=$(date +%Y-%m-%d_%H%M%S)
    fichierArchive=${datadir}/cible/fichier_${dateHeure}.tar.gz
     
    # Compression des fichiers
    cd ${datadir}/repertoire/ && \
       tar -czf "${fichierArchive}" fichier_*.csv && \
       echo "${info} : Compression des fichiers 
    ${fichierArchive}"

  13. #13
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 40
    Par défaut
    Merci pour votre aide

    après le lancement du script , il se lance parfaitement mais il n’arrête pas à archiver les fichiers et il se termine pas il reste toujours en boucle infinie (il n'y a pas de fi car nous n'avons pas mis if then else )

    qu'est-ce que vous en pensez

    Merci encore une fois

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    qu'est-ce que vous en pensez
    Je pense que tu cherches à faire faire un travail qui t'incombe et que tu ne fais aucun effort.

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    après le lancement du script
    lequel ?

    Citation Envoyé par 20132014 Voir le message
    il se lance parfaitement mais il n’arrête pas à archiver
    Mouais. Moi non plus je n'arrête pas à qqchose...

    Citation Envoyé par 20132014 Voir le message
    (il n'y a pas de fi car nous n'avons pas mis if then else )
    Oui, c'est un peu logique. Et l'inverse est aussi vrai (dans le mien j'ai mis un fi parce que j'avais mis un if then else)...

    Citation Envoyé par 20132014 Voir le message
    qu'est-ce que vous en pensez
    pareil que Flodelarab. Faut un peu te sortir les doigts. Ne serait-ce qu'en rajoutant quelques echos par-ci par là pour voir où ça pêche...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 36
    Dernier message: 03/06/2014, 12h33
  2. [PowerShell] Script pour parcourrir les fichiers log
    Par meh_javadev dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 11/09/2012, 17h29
  3. Script pour lister les fichiers txt
    Par Arnaud62 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 30/12/2011, 14h56
  4. Réponses: 4
    Dernier message: 29/06/2009, 12h02
  5. script pour lister les fichier
    Par deathness dans le forum Linux
    Réponses: 3
    Dernier message: 05/10/2008, 10h41

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