我正在尝试tar
使用.tar
扩展名制作存档的命令。
请查看我尝试过的以下一系列命令:
$ ls
abc.jpg hello.jpg xjf.jpg
$ tar -cfv test.tar *.jpg
tar: test.tar: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
$ ls
abc.jpg hello.jpg v xjf.jpg
$ rm v
$ ls
abc.jpg hello.jpg xjf.jpg
$ tar -cvf test.tar *.jpg
abc.jpg
hello.jpg
xjf.jpg
$ ls
abc.jpg hello.jpg test.tar xjf.jpg
Run Code Online (Sandbox Code Playgroud)
为什么它会用不同的选项序列给出不同的响应?即-cfv
vs cvf
。
从我在 bash 脚本中学到的,选项序列并不重要。
ter*_*don 11
正如@jcbermu 所说,对于大多数程序和大多数情况,命令行标志的顺序并不重要。但是,某些标志需要一个值。具体来说,tar 的-f
标志是:
-f, --file ARCHIVE
use archive file or device ARCHIVE
Run Code Online (Sandbox Code Playgroud)
因此,tar
期望-f
有一个值,该值将是它创建的 tarfile 的名称。例如,要将所有.jpg
文件添加到名为 的存档中foo.tar
,您将运行
tar -f foo.tar *jpg
Run Code Online (Sandbox Code Playgroud)
你正在运行的是
tar -cfv test.tar *.jpg
Run Code Online (Sandbox Code Playgroud)
tar
理解为“创造(-c
)称为存档v
(-fv
),包含文件test.tar
和任何结束.jpg
。
tar -cvf test.tar *.jpg
另一方面,当您运行时,它将test.tar
作为存档的名称和*jpg
文件列表。
虽然其他人指出它将它视为-c -f v
,但我觉得我应该注意这只是因为使用了破折号,并且这种行为并不适用于所有版本的 tar。在传统模式(无破折号)中,tar 会特别对待第一个参数,其中的“f”或“b”将消耗选项(so或)之后的下一个完整单词。对于 GNU tar,您可以通过运行在完整的 Texinfo 文档中找到更多详细信息。tar cfb file.tar 20
tar cbf 20 file.tar
info tar styles
通常,您不应依赖任何一种行为,并且始终将 f 指定为最后一个选项,并在它和文件名之间放置一个空格。(-b
仅在写入物理磁带驱动器时在某些情况下很重要,因此在本讨论中可以忽略它。)