#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)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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"
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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 !
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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 !
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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.
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
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
Je barre tout ça dans mon précédent message…
Dernière modification par MicP (Le 25/03/2017, à 00:40)
Hors ligne