当我运行命令时
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) 的比较的推测。