4

Я скопировал кучу файлов с одного сервера на другой, и теперь даты файлов сбрасываются до текущих.

Как сделать резервную копию дат файлов на старом сервере и восстановить их на новом (без повторной передачи всех файлов)?

4 ответа4

7

Вот сценарии для сохранения и восстановления всех {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), хотя.

2

Вы можете использовать stat чтобы получить даты в источнике и touch чтобы изменить их в цели.

2

У меня есть скрипт 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

Это восстановит атрибуты файла.

0

Если имена файлов не слишком странные, и мне нужно только восстановить mtime, я использую это быстрое и грязное решение:

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

Это создает сценарий в источнике, и этот сценарий можно запустить в месте назначения для восстановления временных меток mtime.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .