# Question find et script bash



## Eymerich (1 Décembre 2005)

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 mon_comptedistant@mon.serveur.distant:


----------



## Eymerich (5 Décembre 2005)

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:


----------



## FjRond (6 Décembre 2005)

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) » :

```
when=$(date "+%y-%m-%d")
```
 plus facile à imbriquer et plus lisible.


----------

