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

#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