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

  1. #1
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    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 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,

    «ç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.

  3. #3
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    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 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
    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 :

  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
    Points : 5 849
    Points
    5 849
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    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...

  7. #7
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    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) ?

  9. #9
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    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 é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 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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    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)...

  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
    Points : 5 849
    Points
    5 849
    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
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    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...

  16. #16
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Si tu commences ton script par

    Tu pourras voir et essayer de comprendre ce qu'il ce passe

  17. #17
    Nouveau Candidat au Club
    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
    Points : 0
    Points
    0
    Par défaut
    je suis vraiment désolé ::s:s:s mais je connais vb.net , java mais pas le shell

    dans l’espoir d'apprendre un peu avec vous
    merci quand même pour votre aide

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 726
    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 726
    Points : 31 046
    Points
    31 046
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 20132014 Voir le message
    dans l'espoire d'apprendre un peu avec vous
    Pour apprendre faut au-moins te baser sur un script qui fonctionne. T'as essayé le script de jack-ft ? Ou le mien ? D'autant plus qu'ils sont assez similaires, font le travail demandé et surtout pas super compliqués à analyser.

    Ensuite l'étape suivante (pour celui qui désire apprendre) est de télécharger des tutos puis les lire...

  19. #19
    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
    Points : 5 849
    Points
    5 849
    Par défaut
    Peux-tu nous dire ce que donne l'exécution de cette commande (au moins la dernière ligne affichée, s'il y en a trop!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    du -skc /root/datadir/repertoire/fichier_*.csv

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