tar: jcvfh 和-jcvfh 有什么区别?

tar: What is the difference between jcvfh and -jcvfh?

当删除 - 时,我得到了我想要的(tar,所有文件都按预期包含),当添加 - 时,我得到了一个名为 [=13] 的二进制文件=].

我知道文件 h 是因为它出现在 f 之后而创建的,但我不明白为什么当我删除 -.

时它没有发生

在本例中,它表示“标准输入”。当需要文件参数并且您需要改用标准输入时,某些软件(例如 tar)会使用它。它不是 shell 构造,它取决于您使用的程序。如有疑问,请查看联机帮助页! 标准输入是 -f 选项的参数。在不使用 - 的情况下,您可以使用 tar xvf /home/me/folder/yup 或 tar xvf /dev/stdin

根据您使用的不同平台,不要指望这在全球范围内意味着“标准输入”。因为它不被 shell 解释,每个程序都可以自由地处理它,因为它认为合适。在某些地方,它是标准输出或完全不同的东西:在 su 上它表示'start a login shell'。其他地方根本不解释

像许多传统的 Unix 命令一样,tar 允许不同的选项语法样式:

  1. UNIX 选项,可以分组并且前面必须有破折号。
  2. BSD 选项,可以分组并且不能与破折号一起使用。
  3. GNU 长选项,前面有两个破折号。

tar 手册页说 "the first argument to tar should be a function; either one of the letters Acdrtux, or one of the long function names."

-f 选项后面必须跟要处理的存档的文件名。

您的选项顺序错误,并且会根据平台和其他情况给出不同的意外结果。 c 应该是第一个选项,f 必须在文件名之前。

tar -cjvhf name.tar.gz <path or file>

一样
tar cjvhf name.tar.gz <path or file>