#1 Le 31/05/2008, à 18:16
- Dark-Sham
[Résolu] [BASH] Sélection de fichier spéciale
Bonjour à tous !
J'ai créé un p'tit script en bash pour la sauvegarde/restauration du sources.list et de la liste des paquets installés.
La liste des paquets est dans un fichier sous la forme "paquets-`date +%F`.list". Mais dans le script de restauration, je ne sais pas comment faire pour utiliser le fichier ayant la date la plus grande. Je vous met le code :
#!/bin/bash
# restauration - Script de restauration APT
########## IL FAUT ETRE ROOT ! ##########
DATE = `date +%F`
if test $@ = "sources"
then cp ./sources.list /etc/apt/sources.list && apt-get update
elif test $@ = "paquets"
then dpkg --set-selections < paquets-$DATE.list && apt-get dselect-upgrade
else
echo "Paramètre inconnu"
fi
Ce code, bien évidemment, ne fonctionnera pas s'il n'existe aucun fichier correspondant à la date courante. Comment faire donc ? J'ai pensé aux Regex, mais je ne sais pas si on peut les utiliser en Bash
Merci
Dernière modification par Dark-Sham (Le 01/06/2008, à 13:00)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#2 Le 31/05/2008, à 19:21
- philou8237
Re : [Résolu] [BASH] Sélection de fichier spéciale
Tu peux utiliser stat, qui te donne (parmis d'autres choses) la date de derniere modification du fichier pris en argument (avec l'option --printf="%Y", tu as le nombre de secondes depuis Epoch).
Tu boucles sur tes fichiers, celui qui a la valeur la plus grande est le dernier modifié, donc logiquement, correspond à ta derniere sauvegarde.
Ici c'est juste la recherche du plus grand élément dans une liste (en quelque sorte).
J'ai pas testé ce code, mais ça devrait etre un truc dans le style.
file_time=0;
file=/dev/null;
for i in "paquets-*.list"; do
cur_file_time=`stat --printf="%Y" $i`
if [ $cur_file_time -gt file_time ]; then
file=$i;
file_time=$cur_file_time;
fi
done
Dernière modification par philou8237 (Le 31/05/2008, à 19:22)
Hors ligne
#3 Le 31/05/2008, à 19:30
- philou8237
Re : [Résolu] [BASH] Sélection de fichier spéciale
Autre possibilité, travailler sur le nom de ton fichier :
for var in paquets-*.list; do
# on ne conserve du nom de fichier que la date (on enleve le prefixe paquets- et le
# suffixe .list).
date=${${var%*.list}#*-}
## Ensuite, on traite, en comparant à chaque fois la date du fichier suivant à la courante,
##si plus grande alors tu prend. Mais attention ça dépend comment tu as formater ta
## date ans le nom du fichier. Cf. au dessus.
done
# a la fin, on a la bonne, date, et le fichier a prendre est donc paquets-$date.list
Hors ligne
#4 Le 31/05/2008, à 20:53
- Alain.g
Re : [Résolu] [BASH] Sélection de fichier spéciale
bonsoir
Je ferais plus simplement
ls paquets-*.list | tail -1
Le dernier résultat renvoyé par ls paquets-*.list devant correspondre à la date la plus récente.
Xubuntu Karmic !
Hors ligne
#5 Le 31/05/2008, à 21:20
- philou8237
Re : [Résolu] [BASH] Sélection de fichier spéciale
mmm... effectivement le format de date qu'il a mis le permet ....
Hors ligne
#6 Le 31/05/2008, à 22:11
- Alain.g
Re : [Résolu] [BASH] Sélection de fichier spéciale
le format de date qu'il a mis le permet
....
même si on voulait se baser sur le date de modification, ça ne serait guère plus compliqué avec l'option -t de ls:
ls -t paquets-*.list | head -1
Xubuntu Karmic !
Hors ligne
#7 Le 31/05/2008, à 22:33
- Dark-Sham
Re : [Résolu] [BASH] Sélection de fichier spéciale
Merci beaucoup, seulement la commande `ls -t paquets.*.list | head -1` donne le moins récent...
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#8 Le 31/05/2008, à 22:38
- Dark-Sham
Re : [Résolu] [BASH] Sélection de fichier spéciale
Je n'ai rien dit, le fichier censé être antérieur, je viens de le créer à l'instant XD
Merci, voici le code :
#!/bin/bash
# restauration - Script de restauration APT
########## IL FAUT ETRE ROOT ! ##########
fichier_dpkg = `ls -t paquets.*.list|head -1`
if test $@ = "sources"
then cp ./sources.list /etc/apt/sources.list && apt-get update
elif test $@ = "paquets"
then dpkg --set-selections < $fichier_dpkg && apt-get dselect-upgrade
else
echo "Paramètre inconnu"
fi
Une autre question, la fonction `date` peut-elle donner un timestamp ?
Dernière modification par Dark-Sham (Le 31/05/2008, à 22:48)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#9 Le 01/06/2008, à 12:59
- Dark-Sham
Re : [Résolu] [BASH] Sélection de fichier spéciale
Bonjour ! J'ai reformulé totalement le rangement des fichiers sauvegardes, ils sont maintenant rangés par date dans des dossiers ayant pour nom chaque date. Pour reconnaitre le dossier "le plus récent" EN FONCTION DE SON NOM, j'ai utilisé
date_recente=`ls -1d [[:digit:]]*\-[[:digit:]]*\-[[:digit:]]* | tail -n 1`
Merci quand même de vos réponses, elles m'ont servi à aboutir à cette solution. Si vous voulez le code complet -> http://forum.ubuntu-fr.org/viewtopic.ph … 9#p1818099
A+ =]
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne