创建不同位置的多个目录的 tar.gz 存档 - “tar:懦弱地拒绝创建空存档”

创建不同位置的多个目录的 tar.gz 存档 - “tar:懦弱地拒绝创建空存档”

我正在尝试创建一个存档:

$ cd /tmp
$ tar -czf test1.tar.gz -C ~/Downloads/dir1 -C ~/Documents/dir2 -C ~/dir3/dir4/dir5

...这不应该保留其中目录的完整路径,因此-C

结果

tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.

为什么?如何修复它?

答案1

您的命令在概念上等同于:

tar -czf test1.tar.gz -C ~/Downloads/dir1 "" -C ~/Documents/dir2 "" -C ~/dir3/dir4/dir5 ""

用人类的话来说:

  • tar -czf test1.tar.gztest1.tar.gz:“制作一个名为当前工作目录的gzipped tar 存档,如下所示:...”
  • -C ~/Downloads/dir1 "":“...首先,切换到目录~/Downloads/dir1,然后从那里归档任何内容...”
  • -C ~/Documents/dir2 "":“...然后,切换到目录~/Documents/dir2并从那里归档任何内容...”
  • -C ~/dir3/dir4/dir5 "":“......最后,切换到~/dir3/dir4/dir5那里也不存档任何内容。”

你可能想要这样的东西:

tar -czf test1.tar.gz -C ~/Downloads/dir1 . -C ~/Documents/dir2 . -C ~/dir3/dir4/dir5 .

这会将“不存档”部分替换为“存档当前目录的内容”,后者刚刚切换为使用该-C选项。

请注意,当您提取生成的存档时,dir1dir2和的存档内容dir5将全部提取到提取时的当前目录中。如果这就是您想要的,那就很好,但这是一个稍微不寻常的用例。 (这样的档案被称为焦油炸弹当意外遇到时通常不喜欢,因为它不会整齐地提取到提取过程创建的单个目录中。)

为了便于解释,这里有一个略有不同的命令:

tar -czf test2.tar.gz -C ~/Downloads dir1 -C ~/Documents dir2 -C ~/dir3/dir4 dir5

test2.tar.gz提取时,将导致:

./dir1
./dir2
./dir5

...及其内容。

答案2

您没有提供要tar处理的文件参数。

如果您提供的文件参数不存在,甚至是空字符串,tar则会打印no such file or directory并退出。对于缺少参数,它会打印该错误。


可能您已经感到困惑并认为这-C是定义输入文件。事实并非如此。-C仅更改目录并且指令的顺序-C很重要:

-C, --directory=DIR
    Change to DIR before performing any operations. This option is 
    order-sensitive, i.e.  it  affects  all options that follow.

它用于在任何-C指令之后获取文件参数的相对路径。

也许你只是想:

tar -czf test1.tar.gz ~/Downloads/dir1 ~/Documents/dir2 ~/dir3/dir4/dir5

答案3

恕我直言,提供存档文件的绝对(在某种程度上)路径并不是一个好主意。使用命令会更好:

tar -czf /tmp/test1.tar.gz Downloads/dir1 Documents/dir2 dir3/dir4/dir5

稍后当您提取文件时,这将在您的目录中创建子目录当前的目录,不在你的目录

相关内容