tar退出“无法统计:目录中没有这样的文件”,为什么?


50

我正在尝试使用以下命令创建tar.gz文件:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

然后,它开始创建文件(文件夹中的许多文件),但是随后出现以下错误:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

我没有看到任何关于此错误的描述,这是什么意思?

Answers:


61

-vcfz选项中删除。tar不需要连字符作为选项。

使用连字符时,该-f选项的参数为z。因此,该命令实际上是试图将其存档dvr_rdk_v1.tar.gzdvr_rdk存入名为的存档中z。如果没有连字符,则选项的语义会发生变化,因此命令行上的下一个参数(即归档文件的文件名)将成为f标志的参数。

此外,还要检查您对执行命令的目录的写许可权。


6
不需要连字符,但它们应该不成问题,它们只是可选的
Michael Mrozek

18
@MichaelMrozek实际上,删除-确实有所作为,因为GNU tar很古怪。如果选项参数不以a开头,则不能将其绑定在第一个参数中-,因此to的参数f是to 的下一个参数tar,因此tar vcfz dvr_rdk_v1.tar.gz等效于tar -v -c -f dvr_rdk_v1.tar.gz -z
吉尔(Gilles)'所以

1
如果我删除了我也意识到zj归档压缩是成功的,即使-参与。当我添加连字符时,它将选项中的最后一个字符视为“文件”。因此,如果使用此选项或,则得到jz作为存档文件。-cvfz-cvfj
JohnnyQ '16

9
简介:如果在最后一个选项之外的其他任何位置都出现了“ f”选项,则该命令将不会执行预期的操作。我看不到Gnu在检测到如此严重且易于检测的问题时如何无法添加警告。我只是花了40分钟尝试调试这种怪异。这肯定浪费了数十万工时的生产力。
smci

57

-f选项应直接在文件名之前。因此,使用tar -vczf filename.tar.gz代替-vcfz


啊,这解释了为什么我使用的尝试命令来创建一个名为压缩归档文件j或者z使用这些命令-cvfj-cvfz分别。
JohnnyQ '16

17

tar命令历史上一直是不遵循Unix下几个命令的一个实用程序语法准则

tar的标准页面显示:

f
使用第一个文件操作数(如果已指定b,则使用第二个)作为归档文件的名称,而不是依赖于系统的默认文件名

虽然语法准则包括:

准则5:如果将
一个或多个不带选项参数的选项组合成一个'-'分隔符,则应接受最多一个带选项参数的选项。

因此,尽管您键入的命令tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/在较早版本的tar上可以使用,但是某些严格遵循实用程序语法准则编写的tar版本会将其解析为“ z用作”的文件参数-f。因此,您应该使用以下内容进行移植:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

创建档案

$ tar -cvf music.tar Music/

这显示文件和文件夹的列表

$ tar -tvf music.tar         

并再次提取

$ tar -xvf music.tar         

这并不能真正解释他的错误,对吗?这只是说明的用法tar
2014年

1
@Bernhard好吧,他的错误是他在使用tar错误,尽管至少要提一下关键区别是什么(移至-f最后),这很高兴
Michael Mrozek

2
@MichaelMrozek好吧,他宁可省略而z不是放在f最后,因此我发表了意见。
2014年

此命令适用于ubuntu,它将成功
dhamu 2014年

好!抱歉,我不是在听您的问题,而是适用于ubuntu的命令。
dhamu 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.