我可以提取覆盖的 tar 存档,同时保留原始目标文件的所有权吗?

我可以提取覆盖的 tar 存档,同时保留原始目标文件的所有权吗?

我有一个特定的用例,我想提取一个 tar 存档(作为 root)并故意用存档的内容覆盖一些目标文件。这一切都很好并且很容易实现,但我还想保留原始目标文件的原始所有权和权限。举个例子:

$ touch file && tar cf test.tar.gz file && sudo chown www-data:www-data file && sudo tar xf test.tar.gz && ls -l file -rw-r--r-- 1 tim tim 0 May 1 11:26 file

在这里,我以我的用户 ( ) 身份创建一个文件tim:tim,将其存档,将其所有权更改为www-data:www-data,然后(以 root 身份)提取存档,覆盖原始文件。正如您所看到的,它的所有权已被修改为预存档状态下的文件的所有权,而在提取后,我希望它由www-data:www-data.

我已经相当仔细地查看了tar手册页,但看不到一种立即明显的方法来完成我想要的事情。我错过了什么吗?

答案1

作为普通用户,您将无法覆盖 www-data 拥有的文件,而所有者只有写权限,因此您想要的内容在您的示例中无法工作。

如果您的用户被允许写入这些文件,那么有效的方法是使用--overwrite.但是,当tar尝试更改文件的修改时间和权限时,您会收到错误消息,因为您作为普通用户不允许对不属于您的文件执行此操作。

相关内容