Question Comment enregistrer et restaurer les dates de fichiers créées / modifiées?


J'ai copié un tas de fichiers d'un serveur à l'autre, et maintenant les dates des fichiers sont réinitialisées.

Comment sauvegarder les dates des fichiers sur l'ancien serveur et les restaurer sur le nouveau (sans transférer tous les fichiers)?


4
2017-12-02 19:39


origine


Si vous version de cp (ou scp) a la -p ou la --preserve option, vous devriez l'avoir utilisé! Ne l'oublie pas la prochaine fois ... - gniourf_gniourf
j'ai utilisé find ... | cpio ... | mcrypt ... | pv ... | nc -lp 1 - Vi.


Réponses:


Voici des scripts pour sauvegarder et restaurer toutes les {c, n, a} fois les fichiers et les répertoires:

Sauvegarder:

find / -mount -print0 | perl -ne 'INIT{ $/ = "\0"; use File::stat;} chomp; my $s = stat($_); next unless $s; print $s->ctime . "/" . $s->mtime . "/" . $s->atime ."/$_\0"; ' > dates.dat

Restaurer:

cat dates.dat |  perl -ne 'INIT{ $/ = "\0";} chomp; m!^([0-9]+)/([0-9]+)/([0-9]+)/(.*)!s or next; my ($ct, $mt, $at, $f) = ($1, $2, $3, $4); utime $at, $mt, $f;'

Ce ne est pas définir ctime (heure de changement d'inote) bien que.


6
2017-12-03 00:24





Vous pouvez utiliser stat pour obtenir les dates sur la source et touch pour les modifier sur la cible.


2
2017-12-02 20:11



Comment le faire automatiquement pour un tas de fichiers (y compris ceux avec des noms spéciaux)? Je ne veux pas statuer et toucher chaque fichier manuellement. - Vi.
Vous devez utiliser un script. Je ferais quelque chose avec find, transféré dans une déclaration while, puis en analysant la sortie de stat pour chaque fichier et en appliquant avec le toucher à la source. L'implémentation réelle dépendra de la structure de fichier concernée. - MaQleod
OK, implémenter le script moi-même (je pensais qu’il devrait y avoir un outil pour cela ou pour quelqu'un qui a déjà un tel script). - Vi.


J'ai un script Python pour le faire à https://github.com/robertknight/mandrawer/blob/master/save-file-attrs.py

Sur le serveur d'origine exécuté:

save-file-attrs.py save scp .saved-file-attrs <user>@<dest-server>:<path>

Sur le serveur de destination, exécutez:

cd <path> save-file-attrs.py restore

Cela restaurera les attributs du fichier.


2
2017-12-03 17:15





Si les noms de fichiers ne sont pas trop bizarres et que je n'ai besoin que de restaurer mtime, j'utilise cette solution rapide et sale:

find . -type f -exec stat -c 'touch --no-create -d "%y" "%n"' {} \;

Cela crée un script sur la source et ce script peut être exécuté sur la destination pour restaurer les horodatages mtime.


0
2017-10-20 15:47



Une alternative probablement plus rapide est find . -type f -printf 'touch --no-create -d "%t" "%p"\n' car il ne fourche pas. Mais il a encore besoin d’être amélioré (format d’heure stable) - Daniel Alder