use*_*637 5 command-line bash tar
可能的重复:
sudo tar cvpzf 由于先前的错误而退出失败
当我运行命令时
tar -cvfz backup.tar.gz somedirectory
Run Code Online (Sandbox Code Playgroud)
我得到以下斯特尔
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
但是,当我从-cvfz所有内容中省略前面的连字符时,似乎工作得很好。为什么连字符阻止我对我的文件进行 tar'ing 是否有已知的原因?
Sco*_*nce 12
我不确定为什么tar cvfz有效,根据man页面的快速扫描和我的经验,连字符是标准做法。也许这是 BSD 兼容性问题(例如ps)。
无论如何,您的语法是不正确的。-f将下一个参数作为要压缩到的文件名。在这种情况下,该文件名是z,这不是您所期望的。这是输出的示例,因此您可以了解我的意思:
$ tar -cvfz test.tar.gz scott
tar: test.tar.gz: Cannot stat: No such file or directory
scott/
scott/netx/
scott/netx/locks/
scott/netx/locks/netx_running
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
Anls显示一个名为z. 该file命令显示它是一个未压缩的tar存档。它未压缩,因为-z参数未通过。错误消息来自尝试将不存在的文件添加test.tar.gz到存档中。
只需重新排列选项,您就可以了:
tar -czvf test.tar.gz some/directory
Run Code Online (Sandbox Code Playgroud)
如果你总是提出-f最后一个论点,你会没事的。顺便说一下,请记住带参数的短选项(单字母选项)通常不需要选项和参数之间的空格。
编辑:顺便说一句,如果没有连字符的表单是 BSD 兼容的东西或类似的东西,那么tar在这样的环境中调用的方式很可能是不同的,并且不需要f标志来指定输入文件,但更像cp什么的。但这只是基于与ps(qv)比较的推测。