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 :

Lister mes dumps dans un repertoire, puis les renommer en fonction d'une liste


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut Lister mes dumps dans un repertoire, puis les renommer en fonction d'une liste
    Bonjour,
    Actuellement je bloque sur mon bout de code. Je me tourne vers vous afin d'avoir un peut d'aide.
    Ce que je cherche à faire :

    1) Lister les bases de données =>ok
    2) Pour chaque base de données, je créer son dump =>ok

    3)Voici ou je bloque : Renommer mes dumps par un array ou autre qui contiendrait la liste de mes nouvelles database

    4) Lister un répertoire qui contient mes dumps =>ok
    5 importer un fichier dumps seulement si il est égale au nom de la base de données =>ok


    Je vous remercie d'avance de votre temps et oui c'est normal que l'ensemble n'est pas imbriquer, j'essaye de comprendre ce que j'essaye de faire (même si ce n'est pas gagner)

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #!/bin/bash
     
     
    #(mysqldump -u $user -p$pass --single-transaction $bd_dist > $folder/$bd_dist.sql)
     
    user=xxx 
    passloc=xxx             
    query=$(mysql -u $user -p$passloc -Bse "show databases" | grep -ve performance_schema -ve mysql -ve phpmyadmin -ve information_schema -ve mysql)
    folder=/home/marco
    array=(veolia)
    filedump=(trial jeanoktar)
    baseaimport=(trial jeanboubou)
     
    ###############################################################################################################################################
    #                                               Cette parti consiste à lister les bases de données                                                                                                                                #
    #                                       Pour chaque valeur retenu, on créer un dump                                                                                                                                              #
    ###############################################################################################################################################
    for value in $query
    do
    mysqldump -u $user -p$passloc --single-transaction $value > $folder/$value.sql
    done
    ##############################################################################################################################################
    #                                               Cette parti du Script impose la condition suivante                                                                                                                               #
    #                                       L importation s'effectue seulement si le fichier dump à pour même nom que la database                                                                               #
    #                                                                                                                                                                                                                                                     #
    ##############################################################################################################################################
    for bd_dist in "${filedump[@]}" 
    do
    for bd_loc in "${baseaimport[@]}"
    do
    if [ $folder/$bd_dist == $folder/$bd_loc ]
    then echo : "c'est la win" && mysql -u $user -p$passloc $bd_loc < $folder/$bd_dist
    else echo : "c'est la defaite"
    fi
    done
    done

    Avant :

    dans le répertoire /home/dump, il y a trois fichier :
    dumpA dumpB DumpC


    Après:

    Toujours dans ce même répertoire, je conserve ses trois fichier mais je les renomme en fonction d'une liste.

    Le dumpA se renomme en dumpcusto1
    Le dumpB se renomme en dumpcusto2
    Le dumpC se renomme en dumpcusto3

    Je ne sais pas si il possible de remplacer la valeur 1 d'une liste A par la valeur 1 d'une liste B

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

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

    Une inspiration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ >dumpA
    $ >dumpB
    $ >dumpC
    $ ls
    dumpA        dumpB        dumpC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ vim dumpliste.txt
    $ cat dumpliste.txt 
    dumpA
    dumpB
    dumpC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ vim dumprenommage.txt
    $ cat dumprenommage.txt 
    toto1
    tata2
    tutu3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ paste dumpliste.txt dumprenommage.txt 
    dumpA   toto1
    dumpB   tata2
    dumpC   tutu3
    $ paste -d';' dumpliste.txt dumprenommage.txt 
    dumpA;toto1
    dumpB;tata2
    dumpC;tutu3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ paste -d';' dumpliste.txt dumprenommage.txt |sed 's/^/mv /;s/;/ /'
    mv dumpA toto1
    mv dumpB tata2
    mv dumpC tutu3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ paste -d';' dumpliste.txt dumprenommage.txt |sed 's/^/mv /;s/;/ /'|bash
    $ ls
    tata2           toto1           tutu3         
    $ ls dump*

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut
    Je n’étais pas assez précis dans mon souhait mais du coup, je te remercie parce que j'ai appris une nouvelle chose. Je vais continuer de bosser.
    J'étais parti dans l'idée de faire quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    folder=chemin de mon fichier
    array=(dumpD dumpE dumpF)
     
    for value in $(ls $folder)
    do
    mv $folder/$value mv/$folder/?:aie:
    done
    Je pense faire fausse route, parce que je souhaite que la première valeur de $value s'associe à la premier valeur de mon array, que à la seconde valeur de $value s'applique uniquement sur la seconde. Ainsi de suite ^^

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Il faudrait perdre de reflex de tout mettre dans une variable. Tout est fichier. Alors laisse le résultat en fichier.

    De plus, si les noms de fichiers contiennent des espaces, ton "for" ne va pas fonctionner car il coupera en deux.

    Ne pas confondre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $folder/*; do echo $i;done
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $(ls $folder); do echo $i;done
    qui ne donnent pas le même résultat surtout pour les espaces.
    Seule la première peut être valable.

    Enfin, si tu as déjà un tableau, fais un deuxième tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat dumprenommage.txt 
    toto1
    tata2
    tutu3
    $ read -a ckl < <(sed ':z;N;$!bz; s/\n/ /g' dumprenommage.txt )
    $ echo "${ckl[1]}"
    tata2
    A noter: sed ':z;N;$!bz; s/\n/ /g' dumprenommage.txt |read -a ckl n'est pas valable car le pipe fait que ckl n'est affecté que dans le sous-shell. Le programme principal n'a pas chargé le tableau.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/11/2009, 22h50
  2. Réponses: 1
    Dernier message: 18/01/2009, 09h34
  3. recuperer les fichier present dans un repertoire et les renommer en cascade
    Par oldscrout dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 20/12/2007, 15h44
  4. Dans quel répertoires mettre les modules PERL
    Par Premium dans le forum Modules
    Réponses: 3
    Dernier message: 08/11/2006, 09h46
  5. Lister des fichiers dans un repertoire
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 11h14

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