Script Rsync et problème de backup incrémentale

Bonjour à tous

“Ohhh non encore un newb!”

J’ai commencé un billet ici et on m’a conseillé de venir vous voir ici.

Alors, je cherche à récupérer les fichiers images d’un dossier (qui est mise à jour automatiquement) par leur extension (ça pas de soucis) puis je cherche à les copier dans un dossier ou un script php d’un site s’occupe d’eux (renommage et création d’un fichier xml).
Le souci c’est que vu qu’il les renomme, quand je relance ma copie il les remet et le script les renomme. J’ai donc tenté d’utiliser la commande --backup d’rsync avec un dossier --backup-dir définie, mais cela ne fonctionne toujours pas, il continue de renvoyer les fichier dans le dossier de backup malgré leurs présence dans le dossier ‘incremental’.

Voici mon code.

#!/bin/bash find '/home/nom/image' -name '*.jpg' | while read FILE ; do rsync --backup --backup-dir=incremental --suffix=.old "$FILE" /var/www/media ; done wget --spider 'http://monscript.php' ; #exit 0

A l’exécution de mon code dans le dossier ‘incremental’ il ne met pas tous les fichiers copiés avec l’extension ‘.old’. Je suis obligé de lancer deux fois la commande

Merci d’avance pour votre aide.

PS; un ptit plus serait de remplacer les points par un espace juste après avoir copié les *.jpeg. Mon script a du mal à différencier les deux. Je pensais refaire une commande find et chercher les fichiers puis leur faire sauter leurs point avec ‘sed’? :shifty:

ricardo nous taille une réputation dans la section support.

Désolé d’avoir mis du temps à répondre, mais je t’ai pas oublié.

J’ai un peu de mal à comprendre. Grosso modo tu veut envoyer un ensemble de fichiers jpeg d’un dossier à un autre, puis les envoyer de ce dernier vers un site ?
Et là dessus ton problème c’est que le site va renommer les fichiers et donc ton rsync va réenvoyer les même fichiers ?

Si c’est ça pourquoi ne pas simplement netoyer le dossier tempon entre temps ?

Merci pour ton message.

En effet tu as bien saisie ce que je veux faire. Par contre je ne vois pas ce que tu veux dire sur le dossier tampon.

Je pense que Michel parle du second dossier, qui devrait être vidé, sitôt après qu’il ait fait son travail de transmission au dernier ???

Je sèche encore un peu. Quand vous parler de dossier tampon, parlez vous de --backup-dir=…?

J’ai essayé de suivre ton script mais je ne suis pas fort en codage, moi.
Je pense toutefois qu’il est logique que l’incrémentation ne fonctionne pas car tu en modifie l’extension donc il ne retrouve pas les mêmes noms.
dossier de départ = depart
dossier backup = relai
dossier www = net

fichier depart = machin.jpg
fichier relais = machin.old
fichier net = machin.???
------------ prochaine passe :
fichier depart = machin.jpg
relai cherche un “machin.jpg”, il n’'en voit pas, il ne voit qu’un “machin.old”, donc il copie en plus.

Enfin, je te dirai que je ne comprends pas bien ce que tu veux faire et ses raisons.

Tes images se trouve initialement à un endroit A, tu les prends pour les mettre à un dossier B, puis tu les envoie sur un serveur C pour finalement le remettre dans le dossier B.

Et d’après ce que je comprends à partir de la seconde itération tu a un problème parce que tu renvoie les fichiers du dossier B vers le serveur C qui ont déjà étaient envoyés.

Du coup ma question c’est pourquoi tu ne déplace pas les fichiers sur tu as envoyé sur C juste après les avoir envoyé.

Comme ça :
[ol]
[li]A -> B[/li]
[li]B -> C[/li]
[li]C -> B[/li]
[li]B -> B/traité[/li][/ol]

En faite je n’ai que deux dossier à proprement parler. Mon dossier B est celui ou les fichiers Jpeg vont, ils sont de suite repris par le script qui les renommes mais pas recopié pour être hébergé ailleurs.
Je me suis mis a utiliser Rsync car on m’a dit qu’il permettait de faire de l’incrémental au sauvegardant un fichier témoin (avec suffix) dans le dossier de son choix.

L’idéal aurait été de copier mes fichiers d’un endroit à un autre et de noter dans un document ce qui a été fait, pour ensuite ne copier qu’à partir du document texte et non du dossier de destination.

J’ai du mal à comprendre ce que tu veux faire MisterFreez. B serait le dossier incrémental?

Un grand merci pour votre aide.

Quand ton script renomme les fichiers, il ne devrait pas les replacer au même endroit mais dans un dossier différent.
Ainsi, le dossier B serait toujours chargé avec des fichiers jpeg
Les fichiers modifiés en .truc ne seraient présents que dans un dossier C par exemple
Donc :
A ==> B
B ==> C
travail du script en C

Ainsi, B contient toujours les fichiers Jpeg et à chaque nouvelle copie avec rsync, ce dernier ne modifie que ce qui est différent.
Oublie donc backup et backup-dir.

Le problème est que le script php n’est pas du tout de moi. J’ai essayé de désactiver le renommage mais sans réussir. J’ai envoyé un mail au développeur pour qu’il m’aide et il m’a dit qu’il ne voulait pas désactiver cette fonction sinon cela fonctionnait vraiment mal.
Je pense que se sera la même pour du traitement de fichier.

Je vais essayer de voir tout de même.

Merci

Je ne connais rien en php mais éventuellement, tu peux te faire un petit script en bash.
Quelle est exactement la finalité recherchée ?
Je suppose que ce script ne fait pas que modifier l’extension, il encode de façon différente ?
À quoi servent ces fichiers pour qu’ils aient besoin d’être modifiés ?

En faite le script php génére de l’xml pour un flux RSS, ainsi que des news préformaté. C’est assez puissant. A la base c’est pour un podcast audio mais je détourne le concept.

Je suis vraiment étonné de ne pas trouver d’utilitaires ou de fonctions qui permettraient de copier d’un dossier à un autre des fichiers en prenant une référence annexe.

Je continue ma recherche. Merci !

Je regrette mais je ne peux rien faire de plus, mes connaissances s’arrêtent là.
:006

[quote=“boytruc”]J’ai donc tenté d’utiliser la commande --backup d’rsync avec un dossier --backup-dir définie, mais cela ne fonctionne toujours pas, il continue de renvoyer les fichier dans le dossier de backup malgré leurs présence dans le dossier ‘incremental’.
[/quote]
Normal, le dossier backup permet uniquement de sauvegarder les fichiers déjà présents dans la destination avant qu’ils ne soient recopiés (ou supprimés) depuis la source.
Mais ce dossier n’est pas exploité au prochain tour de rsync … Donc étant renommés, rsync ne les trouve pas en destination, il les copie à nouveau. Si tu veux conserver ce mécanisme de renommage, il te faut gérer un fichier contenant la liste des fichiers à tranférer… c.a.d maintenir un fichier contenant la liste des fichiers à transférer (ou à exclure !)
Une autre solution est d’utiliser ssh (ou lftp) qui te permettra de lister les fichiers distants (destination) et donc de déterminer ceux qui sont à synchroniser ou non …

Comme indiqué plus haut, rsync ne met dans le dossier backup que les fichiers déjà présents dans le dossier destination. Or ton script php les renomme, rsync ne les trouve pas dans le dossier destination et donc ne les copie pas en backup… Sauf si tu relances rsync et que ton script php n’a pas eu le temps de tout renommer… Et je pense que c’est ce qui se passe.

Je voudrais bien mais comment? Je continue mes petites recherches. Ca va marcher! :smiley:

comme ça je dirais : en exploitant la sortie verbeuse de rsync… :unamused:

Rah toujours bloqué. Si quelqu’un a une idée?

Après quelques galères, la réponse m’a été apporté ici.
C’est en KornShell

[code]#!/bin/ksh
DEST_DIR=/destination
HIST_DIR=/images_bck
SOURCE_DIR=/images

find ${SOURCE_DIR} -name “*.jpg” >${HIST_DIR}/tmp.file
exec 3<${HIST_DIR}/tmp.file

while read file <&3;do
file_name=$(basename “${file}”)
if [ ! -f “${HIST_DIR}/${file_name}.old” ];then
cp -p “${file}” "${HIST_DIR}/${file_name}.old"
cp “${file}” "${DEST_DIR}"
fi
done
exec 3<&-
[ -f ${HIST_DIR}/tmp.file ] && rm -f ${HIST_DIR}/tmp.file[/code]