Question find et script bash

Eymerich

Membre confirmé
5 Avril 2003
61
3
55
Paris
Je veux écrire un script bash pour faire une archive tar envoyée sur un serveur distant des fichiers de mon portable modifiés depuis le dernier archivage (ceci afin d'aboutir à une archive tournante sur plusieurs jours des derniers fichiers modifiés).

Voici ce qui marche à partir du terminal: d'abord je fais un

find $repertoire_source -newer "~/liste_jour" -type f -print > ~/liste_jour_tmp

où "liste_jour" est un fichier créé lors de l'archivage précédent. L'option permet de retenir que les fichiers modifiés depuis le dernier archivage.

ensuite un petit tar

tar cvzf sauvegarde_${when}.tar.gz --exclude-from ~/bin/exclude --exclude .DS_Store --files-from ~/liste_jour (rem. when=`date "+%y-%m-%d"` )

avec l'option --files-from liste_jour, pour ne retenir que les fichier trouvés par le find ( rem. je sais que l'on peut combiner par un -exec ou xargs, mais mon propos est d'avoir aussi un fichier à la date précédente et avec le contenu de l'archivage).

enfin: mv liste_jour_tmp liste_jour

Quand je place le tout dans un script bash, find donne une erreur:

find: illegal option -- n
find: illegal option -- e
find: illegal option -- w
find: illegal option -- e
find: illegal option -- r

Aucune idée comment coder find pour qu'il marche de la même façon que dans le terminal (j'ai essayé avec tous les types de " ' ` que je connais...
Par contre si dans le script je remplace l'option " -newer " par " -mtime -1 " pour ne retenir
que les fichiers modifiés dans les 24 heures, tout marche très bien (mais justement que ceux depuis les dernières 24 heures...).

Des idées? Merci d'avance !


Ey.


Ci dessous le script complet:

#!/bin/bash
# Archivage des fichiers modifiés depuis la dernière archive

cd ~;
when=`date "+%y-%m-%d"`
source=~;
target=${1}.${when};

#création liste fichiers à archiver, ceux modifiés et crées depuis la création de liste_jour
find $source -newer "~/liste_jour" -type f -print > ~/liste_jour_tmp

# archivage avec exclusions
tar cvzf ${target}.tar.gz --exclude-from ~/bin/exclude --exclude .DS_Store --files-from ~/liste_jour_${when}

#on garde de coté la liste des fichiers archivés
mv liste_jour_tmp liste_jour

#transfert sur serveur
scp ${target}.tar.gz [email protected]ant:
 
Le problème était simple: ne peut utiliser l'abbréviation "~" dans un script...

Voilà une correction.

Petit script pratique pour se constituer une archive datée distante des ficheirs modifiés en local depuis le dernier archivage.


#!/bin/bash
# Archivage d'une hierarchie de fichiers

cd $HOME;
when=`date "+%y-%m-%d"`
target=sauve.${when};

find $HOME -newer $HOME"/liste_jour" -type f -print > $HOME"/liste_jour_tmp"

tar cvzf ${target}.tar.gz --exclude-from ~/bin/exclude --exclude .DS_Store --files-from $HOME"/liste_jour_tmp"

mv liste_jour_tmp liste_jour

scp ${target}.tar.gz mocomptedistant@mon_serveur_distant.fr:
 
Petite remarque à propos de la forme: « `commande` » :
Eymerich a dit:
when=`date "+%y-%m-%d"`
[/email]:
Héritée du shell C, il faut luit préférer la forme « $(commande) » :
Bloc de code:
when=$(date "+%y-%m-%d")
plus facile à imbriquer et plus lisible.