#1 Le 22/07/2008, à 15:26
- nina018
ecrire script shell (en bash) qui utilise la commande "rsync"
Bonjour tous le monde
Je dois ecrire script shell (en bash) qui utilise la commande "rsync".
Le script va regarder un répertoire précis dans la machine X. Dès
qu'il voit apparaître des fichiers avec une extension précise, il devra le copier vers un machine Y dans un répertoire précis.
Je dois donné X et Y et leur répertoires respectifs en paramètre à ce script shell.
Vous pouvez m'aidez svp
#2 Le 22/07/2008, à 17:16
- whalexis
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Bonjour,
J'ai fait un truc assez similaire sur ma machine. A l'extinction de l'ordi, je fais une sauvegarde automatique des homes sur un disque.
Ça donne ça
rdiff-backup --exclude ignorecase:'**cache' --exclude ignorecase:'**.trash' --exclude ignorecase:'**lost+found' --exclude ignorecase:'**.thumbnails' --exclude ignorecase:'**.tmp' /home/ /media/backup/home
Il te suffit de remplacer /home/ par X et /media/backup/home par Y.
Il faut que tu remplaces les exclude par des includes et que tu définisse ton propre motif (ex: *.jpg).
Par contre pour le lancement automatique de la commande en fonction de la présence du fichier, je ne sais pas. Tu peux le faire avec un cron, mais je pense que ce n'est pas exactement ce que tu veux
Alexis
PS: Attention pour les motifs, il faut doubler les *
#3 Le 23/07/2008, à 10:15
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Merci pour la réponse
Mais j'ai pas bien compris ce que tu as fais dans ton code.
Ce que je veux moi est d'utiliser la commande 'rsync'.
C'est quoi rdiff-backup, exclude, include,cron?
Svp j'ai jamais ecris un script shell donc je suis débutante, donnez moi plus d'explications.
Merci.
#4 Le 23/07/2008, à 11:37
- whalexis
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Milles excuses, j'ai mal lu....:D
J'ai vu copier des fichiers et j'ai pensé "backup".
En fait rdiff-backup te permet de faire une sauvegarde de ce que tu veux.
Les options --exclude te permettent de ne pas prendre en compte un certain type de fichier.
Les options --include te permettent de prendre en compte un certain type de fichier.
Sinon pour rsync, tu peux regarder la documentation (tapes man rsync dans une console)
A première vue, il te suffit de faire un truc comme ça :
rsync X Y
Pour passer les options au shell, utilise %1, %2,... qui correspondent aux paramètres 1,2,...
Alexis
#5 Le 23/07/2008, à 11:54
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Pas de problème
J'ai fais ça et ça marche bien:
rsync -a source user@ip:Dest
Mon problème est comment la lancer automatiquement cad à l'arivé du fichier.
Merci
#6 Le 23/07/2008, à 13:42
- whalexis
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Pour moi, je ne vois qu'un shell contenant une boucle infinie qui lance ton shell de copie des l'arrivée de ton fichier.
Ce n'est pas très élégant, mais je ne vois que ça.
Ça m'intéresse aussi d'avoir une réponse plus jolie que la mienne.
Alexis
#7 Le 23/07/2008, à 14:49
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Merci pour la réponse.
Svp vous pouvez m'aidez à acrire le script shell qui fait la boucle
Merci
#8 Le 24/07/2008, à 00:59
- whalexis
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Alors tu peux faire ça
#!/bin/bash
while(true);do
if [[ -e test.test ]]; then
echo "Traitement du fichier";
fi
if [[ -e sortie.test ]]; then
exit;
fi
done
Attention respectes bien les espaces entre chaque mots, sinon tu auras des erreurs.
La première ligne, qui est un commentaire obligatoire, indique à l'interpréteur de commande quel programme il va utiliser. Ici le bash. Mais tu pourrais mettre celui qui a ta préférence.
Ensuite tu as la boucle while qui fonctionnera tant que c'est vrai (donc tout le temps car on lui dit que de toute manière ça sera toujours vrai)
Ensuite tu as le test de présence du fichier à traiter. S'il est présent, les actions que tu veux faire seront lancées.
Ensuite j'ai ajouté une partie optionnelle dans ton cas. Elle sert à sortir de la boucle while en présence du fichier sortie.test. Mais tu peux tout à fait l'enlever et arrêter ton script avec un Ctrl + C (en mode console uniquement).
J'espère que ça pourra t'aider
@+
Alexis
#9 Le 24/07/2008, à 11:13
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Merci pour votre aide
#10 Le 26/07/2008, à 09:55
- atlante
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Salut,
le plus simple est d'utiliser dnotify (apt-get install dnotify).
Ce programme est spécialement destiné à surveiller des fichiers et répertoires et à effectuer une action en cas de changement.
exemple:
dnotify -CRM /home/Stef/NePasModifier -e echo "On vous dit de ne pas modifier!"
en cas de Creation , Renommage ou Modification d'un répertoire dans le dossier /home/Stef/NePasModifier, exécute la commande echo
Voir le man, l'usage est très simple.
Tu met ce que tu veux effectuer comme actions dans un script (tes rsync et cie), et tu utilises dnotify avec -e tonscript
C'est la modification des inodes qui fait "réagir" dnotify, ce qui fait qu'il n'y a AUCUNE consommation tans que les inodes ne sont pas modifiées (par rapport à un while/sleep) ou à un cron (qui se lance régulièrement).
Hors ligne
#11 Le 27/07/2008, à 10:18
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Merci beaucoup atlante pour l'aide.
Svp je veux seulement quand des fichiers avec une extension précises seront créé je lance mon script comment j'utilise la commande dnotify -CRM pour faire cela.
Merci
#12 Le 27/07/2008, à 11:09
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Voici mon script shell:
Svp aidez moi je lance mon script shell avec la commande "dnotify -CRM /home/Stef/NePasModifier -e.monscript"
Mon script shell est le suivant:
#!/bin/bash
rsync -a -e ssh /home/user/*.txt user@ip:/home/user
Comment je fait pour que la commande rsync me copie seulement le fichier qui est arrivé avec l'extension .txt et non pas tous les fichiers avec l'extension .txt
Merci
#13 Le 27/07/2008, à 11:44
- atlante
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
rsync va synchroniser les répertoires. Si tous les fichiers avec l'extension txt sont déjà copiés, il ne va copier que celui qui vient d'être ajouté. Les autres ne seront pas recopiés.
Hors ligne
#14 Le 27/07/2008, à 12:07
- nina018
Re : ecrire script shell (en bash) qui utilise la commande "rsync"
Un grand merci, ça marche très très bien.
J'ai un autre problème svp quand j'utilise la commande rsync il me demande à chaque fois le mot de passe de la machine destinatrice.
comment je fait pour regler ça?
Merci