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 02/03/2015, à 20:30

krodelabestiole

synchroniser la date de modifications de fichiers sur 2 machines

salut j'essaie de me faire une commande pour lister les dates de modifs des fichiers d'un répertoire :

find . -type f -print -exec date -d @$(stat "{}" -c %Y) +%Y%m%d%H%M.%S \;

je voudrais récup la date de modif d'un fichier avec stat (c'est un timestamp), la mettre au format %Y%m%d%H%M.%S avec date, et faire ça sur tous les fichiers que trouvera find.

le problème c'est que ça donne :

stat: impossible d'évaluer «{}»: Aucun fichier ou dossier de ce type

sans doute parce que je passe "{}" (le retour de find) dans la notation @$()
mais j'ai la même chose avec

find TEST1 -type f -print -exec date -d @`stat {} -c %Y` +%Y%m%d%H%M.%S \;

et j'ai la même erreur

pour info je suis plus ou moins ce tuto :
http://stackoverflow.com/questions/1276 … irectories
mais je dois adapter parce que la commande stat ne fonctionne pas pareil chez moi.

// edit : modification du titre pour mieux refléter l'ensemble du thread

Dernière modification par krodelabestiole (Le 24/03/2017, à 21:58)

Hors ligne

#2 Le 02/03/2015, à 20:48

pingouinux

Re : synchroniser la date de modifications de fichiers sur 2 machines

Bonsoir,
Tu peux faire comme ceci

while read fichier;do date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S; done < <(find . -type f)

Hors ligne

#3 Le 02/03/2015, à 21:00

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

youpi !

avec le -print en plus ça donne :

while read fichier;do echo "$fichier"; date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S; done < <(find . -type f) > /tmp/original_dates.txt

merci bcp !

pour info je compte me servir de ça pour uniformiser les dates de modifs des fichiers en local et en distant pour éviter les incompréhensions des logiciel de sauvegarde ou de synchronisation en général (ça m'évite d'avoir à tout retélécharger).
Il faut ensuite copier le /tmp/original_dates.txt dans le répertoire des fichiers à synchroniser et modifier les dates avec :

cat original_dates.txt | (while read FILE && read DATE; do touch -t $DATE "$FILE"; done)

Hors ligne

#4 Le 03/03/2015, à 08:51

pingouinux

Re : synchroniser la date de modifications de fichiers sur 2 machines

Dans ce cas, tu dois pouvoir faire directement

 while read fichier;do printf "touch -t $(date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S) \"$fichier\"\n"; done < <(find . -type f) >/tmp/original_dates.txt

puis

. /tmp/original_dates.txt

Dernière modification par pingouinux (Le 03/03/2015, à 08:52)

Hors ligne

#5 Le 24/03/2017, à 20:55

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

je ressors mon script qui marche assez bien, mais j'ai un problème à cause d'un décalage horaire. (je suis à lisbonne)

donc quand j'utilise ces commandes pour synchroniser un fichier qui est sur mon ordi (GMT 0) avec mon serveur à paris (GMT +1) ça me donne par ex. pour un fichier sur mon ordi :

Modify: 2016-08-07 20:29:08.403790800 +0100

et sur mon serveur :

Modif. : 2016-08-07 20:29:08.000000000 +0200

du coup fullsync veut tout me resynchroniser...
il faudrait donc que j'adapte cette line :

cat original_dates.txt | (while read FILE && read DATE; do touch -t $DATE "$FILE"; done)

pour ajouter une heure (sur le timestamp que je récupère dans mon fichier original_dates.txt)...
peut-être qu'il faudrait écrire un script du coup ? ou je peux encore faire ça en ligne de commande ?
là ça dépasse mes compétences en la matière...

c'est p-e plus simple de le faire au moment de la création du fichier original_dates.txt ?

while read fichier;do echo "$fichier"; date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S; done < <(find . -type f) > original_dates.txt

mais je vois pas comment ajouter une heure à "date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S"

Hors ligne

#6 Le 24/03/2017, à 21:10

pingouinux

Re : synchroniser la date de modifications de fichiers sur 2 machines

Bonsoir,

mais je vois pas comment ajouter une heure à "date -d @$(stat "$fichier" -c %Y) +%Y%m%d%H%M.%S"

date -d @$(($(stat "$fichier" -c %Y)+3600)) +%Y%m%d%H%M.%S

Hors ligne

#7 Le 24/03/2017, à 21:19

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

ah super merci beaucoup !

et tu as une idée pour prendre en compte les nanosecondes avec stats ?
je pourrais utiliser un truc comme

date -d @$(($(stat "$fichier" -c %Y)+3600)) +%Y%m%d%H%M.%S%N

mais je n'ai que du 0000 après les secondes : 201608072029.08000000000
stat -c %Y retourne seulement la date de la dernière modification en seconde depuis Epoch

pas sûr que ce soit nécessaire, je vais déjà faire un test comme ça, merci encore ! smile

Hors ligne

#8 Le 24/03/2017, à 21:21

MicP

Re : synchroniser la date de modifications de fichiers sur 2 machines

Bonsoir

Une ou deux heures de décalage semblent correspondre au décalage Heure d'été/heure d'hiver,
aussi, je me demande si ce problème de date ne serait pas dû au fait que la RTC d'une des deux machines qui s'échangent des fichiers n'est pas à l'heure UTC (problème connu chez Windows) ?

Dernière modification par MicP (Le 24/03/2017, à 21:27)

Hors ligne

#9 Le 24/03/2017, à 21:33

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

... j'ai une piste pour les ns

stat .bashrc -c %y
2017-02-28 21:49:33.417926600 +0000

j'ai donc les ns en format "lisible". je verrai après test si j'ai besoin d'une précision à la nanoseconde et de faire cette conversion (si ça se trouve ça simplifierai ma ligne de commande)

oui MicP il y a pas mal de systèmes impliqués. mon ordi tourne principalement sur windows, avec des machines virtuelles et bash for windows (que j'utilise pour la création du fichier original_dates.txt). mon serveur est sous debian.
ceci dit je pense que le problème principal est la différence de fuseau horaire :
entre

Modify: 2016-08-07 20:29:08.403790800 +0100

et

Modif. : 2016-08-07 20:29:08.000000000 +0200

il y a bien une heure de décalage (le 2e fichier étant 1h plus vieux)
j'imagine que fullsync prend ça en compte.

Dernière modification par krodelabestiole (Le 24/03/2017, à 21:33)

Hors ligne

#10 Le 24/03/2017, à 21:35

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

mais ça pourrait expliquer les problèmes que j'ai de base avec fullsync...
je vais étudier la question, merci pour le lien !

Hors ligne

#11 Le 24/03/2017, à 21:59

MicP

Re : synchroniser la date de modifications de fichiers sur 2 machines

Si une machine est à Nouméa et l'autre en France, et si les machines ont leur RTC à l'heure UTC, l'aller/retour d'un fichier affichera l'heure de création du fichier selon l'heure locale de chaque machine
<=> l'heure exacte à laquelle le fichier a été créé sera affichée en tenant compte du décalage horaire local de chaque machine,
par exemple :
L'heure d'un fichier créé en France              à 22:00 le 24 mars 2017 (UTC+1)
sera, sur une machine à Nouméa, affichée à 08:00 le 25 mars 2017 (UTC+11), => exactement la même heure UTC

Dernière modification par MicP (Le 24/03/2017, à 22:06)

Hors ligne

#12 Le 24/03/2017, à 22:43

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

pour info ça fonctionne bien pour fullsync avec la méthode sale et rapide (en ajoutant une heure au timestamp) et sans spécifier les nanosecondes.
Merci à tous les 2 !

Pour les questions de sync temporelle UTC j'étudierai la question de plus près quand j'aurais un peu de temps.

Hors ligne

#13 Le 24/03/2017, à 23:12

MicP

Re : synchroniser la date de modifications de fichiers sur 2 machines

Modify: 2016-08-07 20:29:08.403790800 +0100 ≅> 19:29:08 UTC

et

Modif. : 2016-08-07 20:29:08.000000000 +0200 => 18:29:08 UTC

il y a bien une heure de décalage (le 1er 2ème fichier étant 1h plus vieux)

EDIT : Voir messages suivant.

Dernière modification par MicP (Le 25/03/2017, à 00:40)

Hors ligne

#14 Le 25/03/2017, à 00:16

krodelabestiole

Re : synchroniser la date de modifications de fichiers sur 2 machines

ah ben non :
si tu as modifié ton fichier à 18h il est plus vieux que celui que tu as modifié à 19h wink

Hors ligne

#15 Le 25/03/2017, à 00:32

MicP

Re : synchroniser la date de modifications de fichiers sur 2 machines

Tu as tout-à fait raison : ce doit être moi qui est beaucoup trop vieux big_smile

Je barre tout ça dans mon précédent message…

Dernière modification par MicP (Le 25/03/2017, à 00:40)

Hors ligne