Bit*_*Bug 20 linux tar parameter
我正在学习 Linux。我很惊讶地看到参数顺序在制作 tarball 时似乎很重要。
tar -cfvz casual.tar.gz snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)
给出错误:
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
但是如果我发出这样的命令:
tar -cvzf casual.tar.gz snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)
tarball 的创建没有错误
谁能向我解释为什么参数顺序在这个例子中很重要,或者我可以在哪里找到这些信息来了解为什么?我按照我在第一个示例中所做的方式进行了尝试,该示例收到了一个错误,即首先放置所需参数 c 和 f 的逻辑,然后是我的其他参数。
我想完全吸收 Linux,包括理解为什么会发生这样的事情。提前致谢!
Mik*_*kel 33
顺序是否重要取决于您是否以减号开始选项
$ tar -cfvz casual.tar.gz snapback.txt bucket.txt
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
$ tar cfvz casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt
Run Code Online (Sandbox Code Playgroud)
这种不寻常的行为记录在手册页中
Options to GNU tar can be given in three different styles.
In traditional style
...
Any command line words that remain after all options has
been processed are treated as non-optional arguments: file or archive
member names.
...
tar cfv a.tar /etc
...
In UNIX or short-option style, each option letter is prefixed with a
single dash, as in other command line utilities. If an option takes
argument, the argument follows it, either as a separate command line
word, or immediately following the option.
...
tar -cvf a.tar /etc
...
In GNU or long-option style, each option begins with two dashes and
has a meaningful name
...
tar --create --file a.tar --verbose /etc
Run Code Online (Sandbox Code Playgroud)
tar,它是“tape archive”的缩写,在当前约定确定之前就已经存在,因此它保留了不同的兼容性模式。
因此,要“吸收 Linux”,我建议您学习一些入门课程:
tar,ps根据开头是否有减号而不同)xargs -ifoo与 不同xargs -i foo)要以通常的样式获得您想要的行为,请将输出文件名直接放在for 之后-f,例如
$ tar -cvzf casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt
Run Code Online (Sandbox Code Playgroud)
或者:
$ tar -c -f casual.tar.gz -z -v snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)
或者您可以使用不太常见但更易于阅读的 GNU 长样式:
$ tar --create --verbose -gzip --file casual.tar.gz snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)
检查-ftar 手册页中的选项给我们:
Run Code Online (Sandbox Code Playgroud)-f, --file ARCHIVE use archive file or device ARCHIVE
这意味着-f选项后面的下一个单词将是文件名。在您的示例中,-f它跟在字母之后vz,将用作文件名。
之后它将每个参数解析为它的输入以压缩到现在称为vz. 当它尝试这样做时,会tar注意到没有casual.tar.gz要压缩的名称的文件,然后它会给出您的错误。
因此,在 之后-f,它必须始终跟在您要生成的文件的名称之后。