web-dev-qa-db-ja.com

tarは、「Cannot stat:No such file of directory」で終了します、なぜですか?

次のコマンドを使用して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

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

54
ransh

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

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

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

69
Velnix

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

64
twan163

tarコマンド は、歴史的にUnix ユーティリティ構文ガイドライン に準拠していない数少ないコマンドの1つです。

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

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

構文ガイドラインにはこれが含まれていますが、

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

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

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
18
Mark Plotnick