
拡張子を持つアーカイブを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
なぜオプションの順序によって異なる応答を提供するのですか?それvs.Bashスクリプトで学んだ内容に-cfv
よるcvf
と
、オプションの順序は重要ではありません。
答え1
@jcbermuが言ったように、ほとんどのプログラムとほとんどの状況では、コマンドラインフラグの順序は重要ではありません。ただし、一部のフラグには値が必要です。特にtarの-f
フラグは次のとおりです。
-f, --file ARCHIVE
use archive file or device ARCHIVE
したがって、生成するtarファイルの名前になる値をtar
期待します。-f
たとえば、.jpg
名前付きアーカイブにすべてのファイルを追加するには、foo.tar
次のようにします。
tar -f foo.tar *jpg
あなたが実行していること
tar -cfv test.tar *.jpg
tar
「ファイルと-c
。v
-fv
test.tar
.jpg
tar -cvf test.tar *.jpg
一方、実行すると、そのアーカイブのtest.tar
名前とファイルのリストが表示されます。*jpg
答え2
オプションに値が必要でない限り、順序は重要ではありません。あなたの場合- Fファイル名を指定する必要があります。
最初のケース(tar-cfv)このコマンドは、出力ファイル名がv以降であると見なします。- F。
答え3
他の人はそれをそのように扱うと指摘しましたが-c -f v
、これはダッシュを使用したために行われており、この動作はすべてのバージョンのtarには適用されないことに注意する必要があると思います。レガシーモード(ダッシュなし)では、tarは最初の引数を特別に処理します。ここで、「f」または「b」は次の完全な単語を使用します。後ろにオプション(sotar cfb file.tar 20
またはtar cbf 20 file.tar
)。 GNU tarの場合は、次をinfo tar styles
実行してTexinfoドキュメント全体で詳細を見つけることができます。
通常、両方の動作に依存してはいけません。常にfを最後のオプションとして指定し、そのオプションとファイル名の間にスペースを入れます。 (-b
物理テープドライブに書き込むときは、いくつかの場合にのみ重要であるため、この議論では無視できます。)