tar -cvfz 命令会导致错误消息,除非我省略“cvfz”之前的连字符

tar -cvfz 命令会导致错误消息,除非我省略“cvfz”之前的连字符

可能重复:
sudo tar cvpzf 由于之前的错误而失败退出

当我运行命令时

tar -cvfz backup.tar.gz somedirectory

我得到以下 sterr

tar: Exiting with failure status due to previous errors

但是当我省略前面的连字符时,-cvfz一切似乎都正常工作。 连字符阻止我对文件进行 tar 处理的原因是什么?

答案1

我不确定为什么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

显示ls一个名为的文件z。该file命令显示它是一个未压缩的tar存档。它未压缩是因为-z未传递参数。错误消息来自尝试将不存在的文件添加test.tar.gz到存档。

只需重新排序选项就可以了:

tar -czvf test.tar.gz some/directory

如果您总是将-f最后一个参数设为最后一个参数,那就没问题了。顺便说一句,请记住,接受参数的短选项(单字母选项)通常不需要在选项和参数之间留空格。

编辑:顺便说一句,如果没有连字符的形式是 BSD 兼容性的东西或类似的东西,那么tar在这样的环境中调用的方式可能有所不同,并且不需要标志f来指定输入文件,但工作方式更像cp或类似的东西。但这只是基于与ps(qv) 的比较的推测​​。

相关内容