我应该使用什么 tar 命令来在给定日期后更改文件——包括对所有权、权限等的更改——但不包括简单地从备份中恢复的文件?
另一方面,在恢复后遍历所有文件并在恢复过程中更改每个文件的状态更改时间是否更可取?
自给定日期以来,我一直在使用类似于以下的命令对所有最近修改的文件进行压缩,以进行定期穷人备份:
$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -
这不是真正的命令,但它说明了我要表达的观点。如果我将输出发送到 tar 文件,此命令只是简单地转储出应该进入 tar 文件的文件列表。
直到现在,我认为这个命令工作正常,直到我更换了我的硬盘并从备份中恢复了所有文件。查看 的输出stat
,更改日期似乎是我从备份中恢复所有文件的日期,所以现在所有文件都在上面的 tar 命令中被选中。
$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500
甚至--newer-mtime
似乎没有帮助:
$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -
更新:我也尝试了以下方法,但似乎也无济于事,因为它仍然选择了比我想要的更多的文件:
$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -
通过过滤掉目录:
我看到我想抓取的文件确实被抓取了,仅此而已。
出于某种原因,tar 确实会在不考虑时间戳的情况下抓取所有目录,但我想我可以接受,所以上面的命令在大多数情况下仍然很好,这就是为什么在恢复备份之前我没有发现它有任何问题。
现在关于恢复,我说这对每个恢复的文件设置了 Change 属性;因此,
--after-date
当我的下一个备份最终获得所有文件时,它是无用的。为了克服这个问题,我第一次只在恢复之后切换到使用
--newer-mtime
:这让我获得了恢复后的所有新文件,我计划
--after-date
从下一次备份开始再次使用原始文件。这有一个缺点,如下所述:如果在我恢复文件和我的第一次备份之间有任何权限或所有权更改,我不会选择它,我可能永远不会,除非这些相同的文件有他们的权限/所有权更改再次,然后我只会在那个时候得到更新,直到那个时候我的所有备份都会以错误的权限/所有权恢复。
GNU tar 手册说明如下:
我不清楚“等等”是什么意思,但我也忽略了这一点。
考虑到我在这里支持的内容,我不担心这个,所以这次我没问题;但是,在我确实关心它的情况下,我可以丢弃我的增量备份并使用全新的完整备份重新开始,或者我可以按照上述步骤使用一个增量备份来结束我的恢复过程,
--newer-mtime
在恢复后立即使用. 后者会在人们开始使用恢复的文件之前发生,因此在切换回--after-date
.