Forums FUG-FR
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl
Divers et varié >> Programmation >> Script de sauvegarde de fichier.
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl?num=1210925078

Message started by Eddy on 16. May 2008 at 10:04

Title: Script de sauvegarde de fichier.
Post by Eddy on 16. May 2008 at 10:04
Bonjour,

J'aimerai savoir si un script qui permet de sauvegarder des fichiers dont on à renseigné les chemins existe.
Plus concretement :
Le script sauvegarde des chemins de fichiers et/ou dossiers et enregistre  ces fichier ou dossier dans un repertoire précis.
Je voudrais en faite avoir un script qui me fasse des copies de sauvegarde de mes fichiers de configuration.


Title: Re: Script de sauvegarde de fichier.
Post by francis on 16. May 2008 at 11:48
rsync (avec --include-from) ? ou encore mieux (à mon goût): un VCS (et pourquoi pas cvs, puisqu'il est déjà dans la base ?)

PS: si le fil ne continue pas vers la discussion d'un script à proprement parler, je le déplacerai vers "Système", sans doute

Title: Re: Script de sauvegarde de fichier.
Post by ros on 16. May 2008 at 12:09
Je vais épargner du travail à francis.

Voici un script que j'utilise pour faire un backup de mes répertoires de travail, en gros des répertoires  tous les jours :



Code (]
#!/bin/sh

# This script backup the content of the directory
# dayly backup for a week period.
##

WEEKDAY=`date +"%w"`

# Fichier temporaire
TFILE=`printf "BACKUP_FILE_.%d.old" $WEEKDAY`

FILENAME=`printf "BACKUP_FILE.%d.tgz" $WEEKDAY`

#repertoire a sauvegarder
DIRECTORY_TO_BK=$1

cd /tmp
/usr/bin/tar -czf $TFILE $DIRECTORY_TO_BK

# Copie du fichier temporaire cree vers sa destination finale
if [ -f ${TFILE} ):

; then
 cd /var/backups/
 rm -f ${FILENAME}.*
 mv /tmp/${TFILE} ${FILENAME}
fi;

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 16. May 2008 at 12:24
Merci ros, ça représente quoi  : "BACKUP_FILE_" ?

Title: Re: Script de sauvegarde de fichier.
Post by francis on 16. May 2008 at 14:07
Il existe aussi un port pour rsnapshot qui pourrait faire ton affaire.

Title: Re: Script de sauvegarde de fichier.
Post by ros on 16. May 2008 at 14:10
Le fichier de backup crée se nommera p-ex BACKUP_FILE.1.tgz pour celui du dimanche
Tu peux changer BACKUP_FILE par ce que tu veux, voir modifier le script pour le mettre en paramètre

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 20. May 2008 at 11:05
J'ai commencé un petit script, et j'ai besoin d'une petite aide  :)

Lorsque l'utilisateur donne le chemin relatif d'un fichier peut-on retrouver facilement le chemin absolu ?
Par exemple, l'utilisateur lance un script en donnant en paramètre le fichier file de son home comment avoir le chemin /home/titi/file ?
Merci

Title: Re: Script de sauvegarde de fichier.
Post by Marck on 20. May 2008 at 11:19
Ben... le chemin relatif devrait toujours être relatif par rapport à l'actuel répertoire de travail, non (ou cela ne te convient pas...) ?

Donc il doit suffire de récuperer celui-ci avec : pwd

#!/bin/sh
BASE=`pwd`
echo $BASE

A tout hasard, dans ce genre de script, les commandes basename et dirname peuvent aussi être utiles.

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 20. May 2008 at 12:08
Ok donc si je fait :

$./mon_script file1

Si je veux enregistrer le chemin absolu de file1, je dois concatener pwd avec file1.

Si je fait
$./mon_script ../file1
Ca devient plus compliqué :/

Title: Re: Script de sauvegarde de fichier.
Post by ros on 20. May 2008 at 12:33
$ monscript.sh ../../../etc/profile
/etc/profile


$ cat monscript

CHEMIN_RELATIF=`dirname $1`
NOM_FICHIER=`basename $1`

CHEMIN_ABSOLUT=`(cd ${CHEMIN_RELATIF} && pwd )`

echo "${CHEMIN_ABSOLUT}/${NOM_FICHIER}"



Title: Re: Script de sauvegarde de fichier.
Post by francis on 20. May 2008 at 12:45
Pourquoi tant de complications ?:
[code]
LA_CIBLE_EN_ABSOLU=`pwd`/$1[/code]
Non ?

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 20. May 2008 at 13:11
Merci ros, marche très bien.

Francis ta version ne fonctionne pas  si l'utilisateur donne ../path/file.

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 20. May 2008 at 13:19
Premiere version alpha, si vous voyez des abérrations merci de me les signaler.


Code (]
#!/bin/sh

##Verification de l'existence du fichier .backuprc
if [ -f ~/.backuprc ):

;
then echo "Fichier de configuration trouvé"
else
     #Creation du fichier de configuration
     #Demande du repertoire de sauvegarde
     echo "Veuillez indiquer le repertoire de sauvegarde de vos fichiers"
     read directory
     if [ -d $directory ];
     then
         echo "Le répertoire [$directory] à été sauvegarde, pour le modifier ultérieurement, lancez le script avec l'option -d."
     else
         echo "Le répertoire demandé n'existe pas voulez-vous le créer ? [y/n]"
           read reponse
         if [ "$reponse" = "y" ];
         then mkdir -p $directory
         fi
     fi

     echo "Fichier de configuration du script backup_conf
" > ~/.backuprc
     echo "#Repertoire de sauvegarde" >>~/.backuprc
     echo "directory= $directory
" >> ~/.backuprc
     echo "#Liste des répertoires et fichiers à sauvegarder
#Listing
~/.backuprc" >> ~/.backuprc
     echo "Repertoire de sauvegarde enregistre [$directory]"
fi

##OPTION -a##
if [ "$1" = "-a" ];
##Ajout d'un fichier ou repertoire dans la liste à sauvegarder
then
   shift
   for i in $*
   do
     CHEMIN_RELATIF=`dirname $i`
     NOM_FICHIER=`basename $i`
     CHEMIN_ABSOLUT=`(cd ${CHEMIN_RELATIF} && pwd )`
     echo "${CHEMIN_ABSOLUT}/${NOM_FICHIER}" >>~/.backuprc
   done
fi

##OPTION -s##
if [ "$1" = "-s" ];
##Sauvegarde des fichiers et dossier dans le repertoire de sauvegarde.
then      
##Récupération du répertoire de sauvegarde
   directory=$(grep directory ~/.backuprc | awk '{ print $2 }')
   cat ~/.backuprc |
   awk '
         BEGIN {deb=0}
         { if( deb == 0 ){
               if ( $1 == "#Listing" ) {deb=1} }
           else {system("cp -rv "$1" '$directory'") }
   }'
fi

Title: Re: Script de sauvegarde de fichier.
Post by francis on 20. May 2008 at 13:25

-Eddy- wrote on 20. May 2008 at 13:11:
Francis ta version ne fonctionne pas  si l'utilisateur donne ../path/file.

Ah oui ?:

Quote:
fug-fr% cat ~/testit.sh
#!/bin/sh

LA_CIBLE_EN_ABSOLU=`pwd`/$1

ls -l ${LA_CIBLE_EN_ABSOLU}
fug-fr% pwd
/var/tmp
fug-fr% sh ~/testit.sh ../at
total 4
drwxr-xr-x  2 daemon  wheel  512 12 fév  2002 jobs
drwxr-xr-x  2 daemon  wheel  512 12 fév  2002 spool
fug-fr%

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 20. May 2008 at 13:42
Si tu fais un echo à la place de ls, ca te donnera quelquechose de moins sympa. La commande ls est puissante.
Enfin pour mon script, ca fonctionnera mais l'enregistrement du chemin dans le fichier (.backuprc) sera moins "joli".

Title: Re: Script de sauvegarde de fichier.
Post by francis on 20. May 2008 at 13:44
Je comprends pas:

Quote:
fug-fr% cat ~/testit.sh
#!/bin/sh

LA_CIBLE_EN_ABSOLU=`pwd`/$1

echo "${LA_CIBLE_EN_ABSOLU}"
fug-fr% sh ~/testit.sh ../at/jobs
/var/tmp/../at/jobs
fug-fr%

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 22. May 2008 at 15:34
Non mais ca marche mais c'est pas très joli :
/var/tmp/../at/jobs <=> /var/at/jobs
Je préfère la seconde version.

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 22. May 2008 at 17:12
J'ai un petit probleme avec sed :

sed 's/directory.*/'"$FIC"'/' ~/.backuprc

$FIC = /home/....
Et la commande sed elle aime pas mes "/" de $FIC.

Title: Re: Script de sauvegarde de fichier.
Post by francis on 22. May 2008 at 17:34
Pas de problème, sed(1) est flexible:

Quote:
    [2addr]s/regular expression/replacement/flags
Substitute the replacement string for the first instance of the regular expression in the pattern space.  Any character other than backslash or newline can be used instead of a slash to delimit the RE and the replacement. Within the RE and the replacement, the RE delimiter itself can be used as a literal character if it is preceded by a backslash.

Donc, par exemple: sed -e "s#mon_expr_A#mon_expr_B_et_${FIC}#" cible

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 23. May 2008 at 18:39
Bon nouveau petit problème, est-ce qu'il est possible d'assigner une valeur aux variables réservé $1 ...
Je voulais faire un petit :

if [ "$#" -eq 0 ];
then
   1='-s'
fi
Mais ça fonctionne pas.

Title: Re: Script de sauvegarde de fichier.
Post by Marck on 23. May 2008 at 19:14
Salut

man sh :


Quote:
Variables set by the user must have a name consisting solely of alphabetics, numerics, and underscores. The first letter of a variable name must not be numeric. A parameter can also be denoted by a number or a special character as explained below.


Je pense que la réponse est là...

Petite précision :
0 ($0) n'est pas une variable mais un "Special Parameter"
1 ($1) ; etc... ne sont pas des variables mais des "Positional Parameters"

Voilà, si j'ai bien tout compris ;)

Title: Re: Script de sauvegarde de fichier.
Post by Eddy on 23. May 2008 at 19:17
Ok merci. Je vais faie autrement alors  :)

Forums FUG-FR » Powered by YaBB 2.5.2!
YaBB Forum Software © 2000-2025. All Rights Reserved.