提取 tar 存档时保留父目录的所有权和权限

提取 tar 存档时保留父目录的所有权和权限

假设我的文件系统上的某个地方有以下目录结构:

a/             dir;    alice:work; default dir rights
  b/           dir;    alice:work; default dir rights
    test.sh    script; alice:work; executable

接下来,我以 bob 的身份创建此目录结构的档案,并且仅列出 test.sh 作为我想要添加到档案中的文件:

sudo tar cjf backup.tar.bz2 a/b/test.sh

现在我有一个档案 backup.tar.bz2,它应该保留我在命令中指定的文件的所有权和权利(并且我还希望父目录 a 和 b 也是如此!)。

现在,我面临的困境是这样的。如果我还是像 bob 一样,尝试将档案的内容提取到文件系统上的不同位置进行测试,我期望获得与创建档案时相同的文件结构以及相同的所有权和权限。但是,当使用以下命令时

sudo tar xjf backup.tar.bz2

我得到的却是以下文件结构:

a/             dir;    root:root;  default dir rights
  b/           dir;    root:root;  default dir rights
    test.sh    script; alice:work; executable

不知何故,从档案中提取时父目录的所有权并未保留。似乎它将这些目录的所有权赋予提取档案的任何用户(在我的情况下是 root,因为我想保留所有权和权利)。

有没有办法告诉 tar 也保留父目录的所有权?我知道可以通过将它们包含在创建存档的 tar 命令中来实现:

sudo tar cjf backup.tar.bz2 a/ a/b/ a/b/test.sh

但我宁愿不这样做,因为如果 a/ 或 a/b/ 中还有其他文件或目录,那么它们也将成为档案的一部分。

答案1

显然我需要更频繁地阅读帮助页面。如果我在最后一个命令中添加 --no-recursion 参数,它就会执行我想要的操作:

sudo tar --no-recursion -cjf backup.tar.bz2 a/ a/b/ a/b/test.sh

使用问题中的命令提取后将产生以下文件结构:

a/             dir;    alice:work; default dir rights
  b/           dir;    alice:work; default dir rights
    test.sh    script; alice:work; executable

相关内容