tarは「統計情報がありません:ディレクトリにそのようなファイルはありません」で終了します。なぜですか?


50

次のコマンドを使用してtar.gzファイルを作成しようとしています。

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

その後、ファイル(フォルダー内の多くのファイル)の作成を開始しますが、次のエラーが表示されます。

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

このエラーの説明は表示されませんが、どういう意味ですか?

回答:


61

オプション-から削除しvcfzます。tarオプションにハイフンは必要ありません。

ハイフンを使用すると、-fオプションの引数はzです。したがって、コマンドは実質的にアーカイブdvr_rdk_v1.tar.gzを試みてdvr_rdk、というアーカイブに入れようとしますz。ハイフンがないと、オプションのセマンティクスが変更されるため、コマンドラインの次の引数、つまりアーカイブのファイル名がfフラグの引数になります。

また、コマンドを実行しているディレクトリへの書き込み権限を確認してください。


6
それはしていません必要ハイフンを、彼らが問題になることはありません、彼らはただ、オプションのだ
マイケルMrozek

18
@MichaelMrozek実際には、-GNU tarは風変わりですので、削除すると違いが生じます。オプション引数は、aで始まらない場合、最初の引数にバンドルできない-ため、引数to fは、次の引数tarであり、tar vcfz dvr_rdk_v1.tar.gzと同等tar -v -c -f dvr_rdk_v1.tar.gz -zです。
ジル 'SO-悪であるのをやめる' 14

1
また、私が削除したz場合やj-関与していてもアーカイブの圧縮が成功したことに気付きました。ハイフンを追加すると、オプションの最後の文字が「ファイル」として扱われます。そのため、このオプションまたはを使用すると、結果として、jまたはzアーカイブファイルとして取得されます。-cvfz-cvfj
ジョニーキュー

9
要約:最後のオプション以外のオプションとして「f」が発生した場合、コマンドは意図したことを行いません。Gnuがこのような深刻で簡単に検出できる問題を検出したときに警告を追加できなかったのはわかりません。この奇妙さをデバッグしようとして40分費やしました。これは数十万時間分の生産性を無駄にしたに違いありません。
smci

57

-fオプションは、直接ファイル名を前に置く必要があります。そのため、tar -vczf filename.tar.gz代わりに-vcfz


ああ、これは、私が使用しているコマンドが、jまたはzこれらのコマンドで-cvfj、 または-cvfzそれぞれと呼ばれる圧縮アーカイブファイルを作成しようとする理由を説明しています。
ジョニーQ

17

tarコマンドは、歴史的にUnixの従わないいくつかのコマンドの一つとなっているユーティリティの構文のガイドラインを

tarの標準ページには次のように書かれています。

f
アーカイブの名前として、システム依存のデフォルトの代わりに、最初のファイルオペランド(またはbが既に指定されている場合は2番目)を使用します。

構文のガイドラインにはこれが含まれますが:

ガイドライン5:
オプション引数なしの1つ以上のオプションと、オプション引数を取るオプションが最大1つ続くものは、1つの「-」区切り文字の後ろにグループ化するときに受け入れられる必要があります。

したがって、入力したコマンドは、tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/古いバージョンのtarでは問題ありませんが、ユーティリティの構文ガイドラインに厳密に従うように記述された特定のバージョンのtarは、これを解析して「zファイル引数として使用」を意味します-f。そのため、ポータブルにするために次を使用する必要があります。

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

アーカイブを作成するには

$ tar -cvf music.tar Music/

これはファイルとフォルダーのリストを表示します

$ tar -tvf music.tar         

そして再び抽出する

$ tar -xvf music.tar         

これは本当に彼のエラーを説明していませんよね?これはの使い方を説明しているだけですtar
ベルンハルト14

1
@Bernhardまあ、彼の間違いは、彼がtar間違って使っていたということでしたが、少なくとも重要な違いが何であるかを言及するのは良いことです(-f最後に向かって)
Michael Mrozek

2
@MichaelMrozekまあ、彼はむしろ最後にz置いたよりも除外したfので、私のコメント。
ベルンハルト14

Ubuntuのために働いて、このコマンド、それは成功だろう
ダミュ

OK!申し訳ありませんが、私はあなたの質問を聞いていませんが、ubuntuで機能するコマンドです。
ダミュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.