#1 Le 12/10/2015, à 15: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, à 19:58)
Hors ligne
#2 Le 12/10/2015, à 18: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, à 18:12)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 12/10/2015, à 18: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, à 19:01
- Postmortem
Re : [RESOLU] [TAR] Création d'archive avec wildcard
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, à 19:49
- biloute34
Re : [RESOLU] [TAR] Création d'archive avec wildcard
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.
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
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
Hors ligne
#6 Le 12/10/2015, à 19:54
- biloute34
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.
Avec ton conseil, plus de problème, ça fonctionne.
Voici le script de sauvegarde de BDD au complet pour ceux que ça intéresse :
#!/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, à 19:56)
Hors ligne
#7 Le 12/10/2015, à 22:03
- Postmortem
Re : [RESOLU] [TAR] Création d'archive avec wildcard
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, à 22:39
- biloute34
Re : [RESOLU] [TAR] Création d'archive avec wildcard
Génial, merci beaucoup !
Hors ligne