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 23/10/2018, à 21:30

Burstfury

Rsync et la copie de nouveau fichiers

Bonjour,

Malgré plusieurs heures de recherche et d’essais raté je vous demande de l'aide sur ce script.
Je souhaite que le script copie une seul fois le fichier même si sur la destination celui ci à était déplacer supprimer.   Le script fonctionne mais des qu'il y'a des caractères une peux exotique il me relance la synchronisation du fichier.
Voici ou j'en suis avec le script.

 
#!/bin/bash
# Rsync déjà lancé: stop
if [ -e /home/burst/rsync.lock ]
then
echo "Rsync deja lance, on quitte"
exit
fi

# Création d'un fichier .lock pour ne pas lancer deux instances de rsync en parallèle
touch /home/burst/rsync.lock

# Let the show begin
rsync -avzL --progress --inplace --exclude-from transfered_files.txt --log-format='%n' >> transfered_files.txt --rsh='ssh -p 22' -e "ssh -T -c arcfour -o Compression=no -x" /home/burst/test/ burst@192.168.2.1:/volume1/datastore/

# Suppression du fichier lock
rm /home/burst/rsync.lock

exit 

Si quelqu'un à une meilleur solution je suis preneur
Merci beaucoup.

Hors ligne

#2 Le 24/10/2018, à 08:14

bruno

Re : Rsync et la copie de nouveau fichiers

Bonjour,

Burstfury a écrit :

Je souhaite que le script copie une seul fois le fichier même si sur la destination celui ci à était déplacer supprimer.

Ce n'est pas très clair…
rsync synchronise le dossier source avec le dossier destination. Tout fichier nouveau ou modifié sur la source sera copié sur la destination (sauf pour ceux dans les listes d'exclusions et si l'option --existing est utilisée). Qu'est-ce que tu veux faire exactement ? rsync est-il l'outil adapté ?

Burstfury a écrit :

Le script fonctionne mais des qu'il y'a des caractères une peux exotique il me relance la synchronisation du fichier.

Ta commande rsync semble correcte (attention quand même à l'option -L). Qu'est-ce que tu appelles des caractères exotiques ? Il faut nous donner une descrition précise de ton problème.

Hors ligne

#3 Le 24/10/2018, à 12:56

Burstfury

Re : Rsync et la copie de nouveau fichiers

Bonjour bruno

J'ai un serveur dédier, il me sert à héberger télécharger des fichiers. Une fois le téléchargement terminer le script ce lance et je rapatrie le fichier chez moi ou je le déplace dans un autre endroit. C'est pour cette raison que je ne veux pas que Rsync me relance un autre téléchargement du fichier au prochain lancement du script.

Les caractères exotiques qui ce trouve dans "transfered_files.txt"  et don rsync ne prend pas en conte. Par exemple,   "Ubuntu 16.04.iso"  l'espace entre Ubuntu et 16.04 ne dois pas être pris en compte par contre si le fichier s'appelle "Ubuntu-16.04.iso" a ce moment la pas de problème rsync ne me le retélécharge  pas.

J'avais fais une petit modif du script  avec la commande "ls" pour avoir un meilleur listing du dossier mais ça fonctionne à moitié. Les fichiers avec des espaces il me les retelecharge à chaque fois.

 
#!/bin/bash
# Rsync déjà lancé: stop
if [ -e /home/burst/rsync.lock ]
then
echo "Rsync deja lance, on quitte"
exit
fi

# Création d'un fichier .lock pour ne pas lancer deux instances de rsync en parallèle
touch /home/burst/rsync.lock

# Let the show begin
rsync -avzL --progress --inplace --exclude-from='/home/burst/transfered_files.txt' --rsh='ssh -p 22' -e "ssh -T -c arcfour -o Compression=no -x" /home/burst/test/ burst@192.168.2.1:/volume1/datastore/
if [ $? == 0 ]; then

ls /home/burst/test/  > /home/burst/transfered_files.txt
fi

# Suppression du fichier lock
rm /home/burst/rsync.lock

exit

J’espère avoir était plus précis, c'est assez difficile d'expliquer en écrit.
Merci encore pour votre aide.

Dernière modification par Burstfury (Le 24/10/2018, à 12:58)

Hors ligne

#4 Le 24/10/2018, à 13:33

Hoper

Re : Rsync et la copie de nouveau fichiers

Il faudrait essayer d'entourer le nom des fichiers présents dans "transfered_files" par des quotes (simple ou doubles) pour tester...

Par exemple avec un truc du genre :
rm -f /home/burst/test/transfered_files
for i in `ls /home/burst/test/`
do
    echo -e -n "'" >> /home/burst/test/transfered_files
    echo -e -n $i >> /home/burst/test/transfered_files
    echo -e -n "'\n" >> /home/burst/test/transfered_files
done

A mettre à la place de ton ls pour tester.
Mais globalement c'est très moche... je veux dire, je comprend pas le besoin. rsync c'est justement fait pour ne modifier que ce qu'il faut modifier....

Alors à quoi bon tout ça ? Si tu veux faire des copies en mode "one shot" c'est scp qu'il faut utiliser, par rsync...


Mes tutos et coups de gueule :
http://hoper.dnsalias.net/atdc/
Mastodon: @hoper@framapiaf.org

Hors ligne

#5 Le 24/10/2018, à 13:45

bruno

Re : Rsync et la copie de nouveau fichiers

Pour la liste d'exclusion il faudrait voir le fichier. Le fichier doit contenir un motif d'exclusion sur chaque ligne, si une espace doit être prise en compte il faut l’échapper, exemple :

*.bak
/toto/*
Ubuntu\ 16.04.iso

Pour le reste, si toutefois j'ai bien compris, rsync n'est pas l'outil qu'il de faut puisque tu ne veux pas synchroniser mais seulement copier des fichiers du serveur vers ta machine personnelle. Pour une simple copie via SSH, utilise scp.

Hors ligne

#6 Le 24/10/2018, à 15:58

Postmortem

Re : Rsync et la copie de nouveau fichiers

Bonjour,
Quelle est ta version de rsync ?
Chez moi, ça fonctionne comme tu l'attends ; exemple avec un fichier se nommant « fic src.txt » ; ce dernier n'est pas copié une 2ème fois malgré sa suppression sur la cible :

Postmortem@mon_pc:/tmp/test$ ls -lR
.:
total 8
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:52 cible
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 source

./cible:
total 0

./source:
total 0
-rw-r--r-- 1 Postmortem Postmortem 0 oct.  24 16:50 'fic src.txt'
Postmortem@mon_pc:/tmp/test$ rsync -avzL --exclude-from transfered_files.txt --log-format='%n' >> transfered_files.txt source/ cible
Postmortem@mon_pc:/tmp/test$ ls -lR
.:
total 12
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 cible
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 source
-rw-r--r-- 1 Postmortem Postmortem  131 oct.  24 16:53 transfered_files.txt

./cible:
total 0
-rw-r--r-- 1 Postmortem Postmortem 0 oct.  24 16:50 'fic src.txt'

./source:
total 0
-rw-r--r-- 1 Postmortem Postmortem 0 oct.  24 16:50 'fic src.txt'
Postmortem@mon_pc:/tmp/test$ rm cible/*
Postmortem@mon_pc:/tmp/test$ ls -lR
.:
total 12
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:53 cible
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 source
-rw-r--r-- 1 Postmortem Postmortem  131 oct.  24 16:53 transfered_files.txt

./cible:
total 0

./source:
total 0
-rw-r--r-- 1 Postmortem Postmortem 0 oct.  24 16:50 'fic src.txt'
Postmortem@mon_pc:/tmp/test$ rsync -avzL --exclude-from transfered_files.txt --log-format='%n' >> transfered_files.txt source/ cible
Postmortem@mon_pc:/tmp/test$ ls -lR
.:
total 12
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 cible
drwxr-xr-x 2 Postmortem Postmortem 4096 oct.  24 16:50 source
-rw-r--r-- 1 Postmortem Postmortem  249 oct.  24 16:53 transfered_files.txt

./cible:
total 0

./source:
total 0
-rw-r--r-- 1 Postmortem Postmortem 0 oct.  24 16:50 'fic src.txt'
Postmortem@mon_pc:/tmp/test$ 

Ma version de rsync est :
rsync  version 3.1.2  protocol version 31


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne