#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,
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é ?
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.
#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.
#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