我正在尝试创建一个存档:
$ 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.gz
test1.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
选项。
请注意,当您提取生成的存档时,dir1
、dir2
和的存档内容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
稍后当您提取文件时,这将在您的目录中创建子目录当前的目录,不在你的家目录