tar: /:文件在读取时已更改。这是表示tar跳过了一个或多个文件吗?

4

我正在运行Ubuntu 16.0.4 LTS,并压缩一个包含32Gb(CSV)文件的目录,以便我可以删除目录中的800k个以上的文件并创建一些空间。

我运行以下命令 tar czxvf /path/to/archive.tar.gz /path/to/source/directory

在命令提示符返回之前(即tar完成任务),最后一行是:

tar: /path/to/some/folder: file changed as we read it.

从tar文档中得知,这只是一个警告消息。然而,在删除原始文件之前,我需要确保所有800K+文件都已被tar正确归档和压缩。

由于tar的消息没有包含错误消息,这是否意味着没有出现任何错误,因此可以安全地删除原始文件?


只有一种方法可以找出来。解压它们并运行 sha256 :D - hellow
1个回答

3

tar的文档没有明确说明,但从其他来源(包括这里)可以看出,tar确实会存档文件,但它可能会捕捉到一些混合的数据,其中部分是修改前的内容,而另一部分则是修改后的内容。

例如,tar先读取文件的前X个字节,此时文件被修改,接着tar读取文件的下一个Y个字节。存档的版本现在包含了修改前的X个字节和修改后的Y个字节。

在许多情况下,例如仅向日志文件末尾追加记录时,这并不重要,因为仅在文件末尾进行更改,并且不会触及现有的文件数据。但是这种情况有所不同。

注意:如果出现像在读取过程中截断文件的情况,tar将无法继续运行并输出错误。然而,如果你只收到“文件已更改”这个警告,那么tar已经存档了该文件。


1
那么,我们如何判断是“文件在读取时已更改”的警告还是错误? - flodin
1
警告是指在通知您可能出现问题后,tar进程仍然继续进行。错误是指tar进程因无法继续而停止。 “读取文件时已更改”始终是一种警告,但还有其他类似的情况可能导致错误,需要tar停止运行。 - thomasrutter
谢谢,但这并没有让我更明智。我如何确定进程停止是因为无法继续还是已经完成? - flodin
进程终止后的非零响应代码表示它以错误结束。 stderr 打印的信息通常应该进行澄清。 - thomasrutter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接