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 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 hmm

Merci smile

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 smile....

Hors ligne

#6 Le 31/05/2008, à 22:11

Alain.g

Re : [Résolu] [BASH] Sélection de fichier spéciale

philou8237 a écrit :

le format de date qu'il a mis le permet smile....

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