我已经将一堆文件从一台服务器复制到另一台服务器,现在文件的日期被重置为当前日期。
如何备份旧服务器上的文件日期并在新服务器上恢复它们(无需重新传输所有文件)?
答案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;'
答案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
在目标上修改它们。