使用 Tar,当仅给出特定文件时如何保留父文件夹的权限?

使用 Tar,当仅给出特定文件时如何保留父文件夹的权限?

假设我有一个具有一些奇特权限的文件夹:

mkdir abc
mkdir abc/def
chmod 777 abc

现在我想创建一个备份:

tar -cpzvf test.tar.gz abc/def/

现在让我们删除 abc/ 并从存档中恢复它:

rm -rf abc/
tar -xpzvf test.tar.gz

abc/将不再拥有原来的权限:

find abc -printf "%m:%f\n"
755:abc

我知道,如果我通过提供 abc/ (而不是 abc/def/)作为参数来创建 tar 文件,它将很好地恢复两个文件夹的权限。但是,就我而言,我需要明确提供 abc/def/ 作为参数。有没有办法达到相同的结果?

答案1

要跟进 @schily 的好答案,要将顶级目录添加abc到存档中,而不添加除 之外的任何子目录def,使用 GNU tar,您可以这样做:

tar -zcf file.tgz --no-recursion abc --recursion abc/def

使用 libarchive 的bsdtar、 或pax,您始终可以恢复为find生成所需文件的确切列表:

(printf 'abc\0'; find abc/def -print0) | bsdtar -zcnf file.tgz --null -T -

答案2

您的 umask 已应用。尝试:

掩码000; tar -xpzvf 测试.tar.gz

答案3

您的问题是该目录abc不在存档中,因此无法从存档中恢复。

由于它是必需的但缺失,因此tar使用您的凭据下的默认权限创建它。

如果您还想恢复权限abc,则需要将其放入存档中。

相关内容