在压缩文件时强制 tar 忽略/跳过错误?

PJ *_*net 12 tar

假设我执行此操作tar cfzp home.tar.gz /home(需要一段时间)并且在压缩期间文件更改并且 tar 失败,我收到“文件在我们读取时已更改”并且 tar 停止。我认为 home.tar.gz 现在不完整,或者这只是“通知”而不是真正的错误?

是否有某种“强制”选项可以使 tar 完成其工作并且不会因错误而中止?

编辑/更新:我发现“--ignore-failed-read 不要在不可读的文件上以非零值退出”,至少我认为它正在工作。但是需要注意参数的顺序,因为您最终可能会得到一个名为“--ignore-failed-read”的 tar 文件

我需要忽略其他任何东西吗?

更新:如果没有“--ignore-failed-read”,如果文件已被删除“文件在我们阅读之前被删除”,tar 将继续运行。但是,我认为它可能会因“文件在我们读取时已更改”错误而中止,但我真的不知道。很难将存档与“原始”进行比较,因为我有来来往往的缓存文件等。

更新:仔细观察“文件在我们阅读时发生了变化”更像是一个通知,如果在 tar 开展业务时文件发生变化,则 tar 似乎会继续运行。但我会留下答案,也许更有经验的人可以增加更多的见解。

Ste*_*han 6

您的假设是正确的,“文件在我们读取时已更改”是一个通知,通常与 tar 创建存档时正在使用的文件(即在创建过程中写入)有关。如果一致性很重要,你最好在别处同步内容,即

rsync -avz /my/home/ /somebackupdir/my/home/  # initial sync, followed by 
rsync -avz /my/home/ /somebackupdir/my/home/  # any subsequent sync, repeated
                                              # as often as you feel necessary
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个备份位置的好处,它只需要在创建 tarball 之前更新差异。


小智 6

我认为你的问题的正确答案应该是:

使用tar --warning=no-file-changed它只会抑制类似的警告"%s: file changed as we read it"。将军--ignore-failed-read可能会忽略你不想忽略的失败。