Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/10/2015, à 16:28

biloute34

[RESOLU] [TAR] Création d'archive avec wildcard

Salut,

Je me fait un script de backup de BDD mais je n'arrive pas a créer mon TAR car je n'arrive pas à l'utiliser correctement avec un wildcard.

Voici le script :

# je set mes variables secretes ici
liste_bdd=('nom_de_BDD' 'autre_BDD')
datetime=$(date +%Y%m%d_%H%M%S)

for database in ${liste_bdd[*]}
do
        mysqldump -u $MYSQL_USER -p$MYSQL_PASS $database > /tmp/${datetime}_${database}.sql
done

# Archive compressée des dump de BDD
tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp ${datetime}_*

# Suppression des dump unitaires
...
# Renommage du tar.gz avec la date
...
# Connexion SFTP + envoi du dump
...
# Suppression de la sauvegarde locale
...

J'ai également essayé :

tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp --wildcards "${datetime}_*"

mais voici l'erreur :

tar: 20151012_095005_* : stat impossible: Aucun fichier ou dossier de ce type
tar: Arrêt avec code d'échec à cause des erreurs précédentes

Avez-vous une solution pour archiver mes dump dans le tar ?

Merci

Dernière modification par biloute34 (Le 12/10/2015, à 20:58)

Hors ligne

#2 Le 12/10/2015, à 19:10

Postmortem

Re : [RESOLU] [TAR] Création d'archive avec wildcard

Salut,

tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp ${datetime}_*

Ceci ne fonctionne pas car c'est le shell qui transforme « ${datetime}_* » en une liste de fichier ; vu que tu n'es pas dans /tmp, il n'y a pas de fichier « ${datetime}_* » à l'endroit où tu te trouves, « ${datetime}_* » est donc laissé tel que et tar cherche un fichier se nommant exactement « ${datetime}_* » dans /tmp, fichier qu'il ne trouve pas.

Et j'ai l'impression que l'option --wildcards sert pour les patterns placés dans les listes où on met les fichiers à exclure.

Pour résoudre simplement, il faut te placer sous /tmp avant de lancer le tar.


Edit :
Et plutôt que :

for database in ${liste_bdd[*]}

Mieux vaut mettre :

for database in "${liste_bdd[@]}"

Dernière modification par Postmortem (Le 12/10/2015, à 19:12)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 12/10/2015, à 19:30

Hizoka

Re : [RESOLU] [TAR] Création d'archive avec wildcard

et avec

tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp/${datetime}_*

non ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 12/10/2015, à 20:01

Postmortem

Re : [RESOLU] [TAR] Création d'archive avec wildcard

Hizoka a écrit :

et avec

tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp/${datetime}_*

non ?

Non, le -C est en trop, sinon, oui !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 12/10/2015, à 20:49

biloute34

Re : [RESOLU] [TAR] Création d'archive avec wildcard

Hizoka a écrit :
tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp/${datetime}_*

J'ai testé avec ta solution et ça ne fonctionne pas et il s'est carrément foutu de ma g*****:

tar: Je refuse de créer un fichier d'archive vide (oui je suis lâche)
Try 'tar --help' or 'tar --usage' for more information.
Hizoka a écrit :

Et plutôt que :

for database in ${liste_bdd[*]}

Mieux vaut mettre :

for database in "${liste_bdd[@]}"

j'ai modifié ça sans trop savoir pourquoi, mais merci smile
J'imagine que les double quote servent au cas ou j'ai des valeur avec des espace dans ma liste ou un truc dans le genre. Par contre le @ plutôt que * je vois pas du tout. Si tu as une explication je suis preneur wink

Hors ligne

#6 Le 12/10/2015, à 20:54

biloute34

Re : [RESOLU] [TAR] Création d'archive avec wildcard

Postmortem a écrit :

Salut,

tar -czvf /tmp/DUMP_BDD.tar.gz -C /tmp ${datetime}_*

Ceci ne fonctionne pas car c'est le shell qui transforme « ${datetime}_* » en une liste de fichier ; vu que tu n'es pas dans /tmp, il n'y a pas de fichier « ${datetime}_* » à l'endroit où tu te trouves, « ${datetime}_* » est donc laissé tel que et tar cherche un fichier se nommant exactement « ${datetime}_* » dans /tmp, fichier qu'il ne trouve pas.

Et j'ai l'impression que l'option --wildcards sert pour les patterns placés dans les listes où on met les fichiers à exclure.

Pour résoudre simplement, il faut te placer sous /tmp avant de lancer le tar.

Avec ton conseil, plus de problème, ça fonctionne. big_smile
Voici le script de sauvegarde de BDD au complet pour ceux que ça intéresse wink :

#!/bin/bash
echo "----------------------------------------"
echo "Démarrage du script de sauvegarde de BDD"
echo "----------------------------------------"

MYSQL_USER='root'
MYSQL_PASS='mon_super_password'

SFTP_HOST='xx.xx.xx.xx'
SFTP_PORT='1234'
SFTP_USER='mon_user'

liste_bdd=('ma_bdd' 'mon_autre_bdd')
datetime=$(date +%Y%m%d_%H%M%S)

# On travaille dans /tmp
cd /tmp

for database in "${liste_bdd[@]}"
do
        mysqldump -u $MYSQL_USER -p$MYSQL_PASS $database > ${datetime}_${database}.sql
done

# Archive compressée des dump de BDD
tar -czvf DUMP_BDD.tar.gz ${datetime}_*

# Suppression des dump unitaires
rm ${datetime}_*
# Renommage du tar.gz avec la date
mv DUMP_BDD.tar.gz ${datetime}_DUMP_BDD.tar.gz

# Connexion SFTP + envoi du dump
sftp -P $SFTP_PORT ${SFTP_USER}@${SFTP_HOST}<<end
cd Archive/
put ${datetime}_DUMP_BDD.tar.gz
end

# Suppression de la sauvegarde locale
rm ${datetime}_DUMP_BDD.tar.gz

echo "Sauvegarde terminée"
echo "----------------------------------------"

Merci à tous !

Je fais de la pub pour mon autre problème lié à celui-ci : problème de crontab et de fuseau horaire :
https://forum.ubuntu-fr.org/viewtopic.php?pid=20779101

Dernière modification par biloute34 (Le 12/10/2015, à 20:56)

Hors ligne

#7 Le 12/10/2015, à 23:03

Postmortem

Re : [RESOLU] [TAR] Création d'archive avec wildcard

biloute34 a écrit :

j'ai modifié ça sans trop savoir pourquoi, mais merci
J'imagine que les double quote servent au cas ou j'ai des valeur avec des espace dans ma liste ou un truc dans le genre. Par contre le @ plutôt que * je vois pas du tout. Si tu as une explication je suis preneur

${tableau[ *]} et ${tableau[@]} sont remplacés tous les 2 par la liste des valeurs du tableau. La différence intervient quand on les utilise entre guillemets ; pour comprendre, essaie ceci :

tab=('valeur 1' 'valeur 2')
echo 'Avec "${tab[@]}" :'; for i in "${tab[@]}"; do echo "#$i#";done
echo 'Avec "${tab[*]}" :'; for i in "${tab[*]}"; do echo "#$i#";done
echo 'Avec ${tab[@]} :'; for i in ${tab[@]}; do echo "#$i#";done
echo 'Avec ${tab[*]} :'; for i in ${tab[*]}; do echo "#$i#";done

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 12/10/2015, à 23:39

biloute34

Re : [RESOLU] [TAR] Création d'archive avec wildcard

Génial, merci beaucoup !

Hors ligne