假设我有一个具有一些奇特权限的文件夹:
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
,则需要将其放入存档中。