如何保存和恢复文件的创建/修改日期?

如何保存和恢复文件的创建/修改日期?

我已经将一堆文件从一台服务器复制到另一台服务器,现在文件的日期被重置为当前日期。

如何备份旧服务器上的文件日期并在新服务器上恢复它们​​(无需重新传输所有文件)?

答案1

以下是保存和恢复所有{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-change 时间)虽然。

答案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

这将恢复文件属性。

答案3

如果文件名不是太奇怪,并且我只需要恢复 mtime,我会使用这个快速而肮脏的解决方案:

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

这会在源上创建一个脚本,并且该脚本可以在目标上运行以恢复 mtime 时间戳。

答案4

您可以使用它stat来获取源上的日期并touch在目标上修改它们。

相关内容