Я скопировал кучу файлов с одного сервера на другой, и теперь даты файлов сбрасываются до текущих.
Как сделать резервную копию дат файлов на старом сервере и восстановить их на новом (без повторной передачи всех файлов)?
Я скопировал кучу файлов с одного сервера на другой, и теперь даты файлов сбрасываются до текущих.
Как сделать резервную копию дат файлов на старом сервере и восстановить их на новом (без повторной передачи всех файлов)?
Вот сценарии для сохранения и восстановления всех {c, n, a} времен файлов и каталогов:
Сохранить:
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
Восстановить:
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;'
Это не устанавливает ctime (время изменения inote), хотя.
Вы можете использовать stat
чтобы получить даты в источнике и touch
чтобы изменить их в цели.
У меня есть скрипт Python для этого на https://github.com/robertknight/mandrawer/blob/master/save-file-attrs.py
На исходном сервере запустите:
save-file-attrs.py save
scp .saved-file-attrs <user>@<dest-server>:<path>
На конечном сервере запустите:
cd <path>
save-file-attrs.py restore
Это восстановит атрибуты файла.
Если имена файлов не слишком странные, и мне нужно только восстановить mtime, я использую это быстрое и грязное решение:
find . -type f -exec stat -c 'touch --no-create -d "%y" "%n"' {} \;
Это создает сценарий в источнике, и этот сценарий можно запустить в месте назначения для восстановления временных меток mtime.