Questão Como salvar e restaurar as datas criadas / modificadas do arquivo?


Copiei vários arquivos de um servidor para outro e agora as datas dos arquivos são redefinidas para atual.

Como fazer backup de datas de arquivos no servidor antigo e restaurá-los no novo (sem transferir novamente todos os arquivos)?


4


origem


Se você versão de cp (ou scp) tem o -p ou o --preserve opção, você deveria ter usado isso! Não se esqueça da próxima vez ... - gniourf_gniourf
eu usei find ... | cpio ... | mcrypt ... | pv ... | nc -lp 1 - Vi.


Respostas:


Aqui estão os scripts para salvar e restaurar todos os {c, n, a} tempos de arquivos e diretórios:

Salve :

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

Restaurar:

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;'

Isso não set ctime (tempo de troca de partituras) Apesar.


6





Você pode usar stat para obter as datas na fonte e touch para modificá-los no alvo.


2



Como fazê-lo automaticamente para um monte de arquivos (incluindo aqueles com nomes especiais)? Eu não quero stat e tocar cada arquivo manualmente. - Vi.
Você teria que usar um script. Eu faria algo com find, piped em uma declaração while, em seguida, analisando a saída de stat para cada arquivo e aplicando com toque para a fonte. A implementação real dependerá da estrutura de arquivos específica envolvida. - MaQleod
OK, implementando o script sozinho (achei que deveria haver uma ferramenta para isso ou para alguém que já tivesse esse script). - Vi.


Eu tenho um script Python para fazer isso em https://github.com/robertknight/mandrawer/blob/master/save-file-attrs.py

No servidor original, execute:

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

No servidor de destino, execute:

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

Isso irá restaurar os atributos do arquivo.


2





Se os nomes dos arquivos não são muito estranhos, e eu só preciso restaurar o mtime, eu uso essa solução rápida e suja:

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

Isso cria um script na origem e esse script pode ser executado no destino para restaurar os registros de data e hora do tempo.


0



Uma alternativa provavelmente mais rápida é find . -type f -printf 'touch --no-create -d "%t" "%p"\n' porque não bifurca. Mas ainda precisa de alguma melhora (formato de tempo estável) - Daniel Alder