異なる場所に複数のディレクトリのtar.gzアーカイブを作成する - "tar:卑劣にも空のアーカイブの作成を拒否します"

異なる場所に複数のディレクトリのtar.gzアーカイブを作成する - "tar:卑劣にも空のアーカイブの作成を拒否します"

アーカイブを作成しようとしています。

$ cd /tmp
$ tar -czf test1.tar.gz -C ~/Downloads/dir1 -C ~/Documents/dir2 -C ~/dir3/dir4/dir5

...これはその中にあるディレクトリのフルパスを保存してはいけません。-C

結果

tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.

なぜ?どうすれば修正できますか?

答え1

あなたのコマンドは概念的に次のとおりです。

tar -czf test1.tar.gz -C ~/Downloads/dir1 "" -C ~/Documents/dir2 "" -C ~/dir3/dir4/dir5 ""

人間の観点から見ると:

  • tar -czf test1.tar.gztest1.tar.gz:「次のように、現在の作業ディレクトリという名前のgzipで圧縮されたtarアーカイブを作成します。...」
  • -C ~/Downloads/dir1 "":「...最初にディレクトリに切り替えて、そこ~/Downloads/dir1にあるすべてのアイテムをアーカイブします...」
  • -C ~/Documents/dir2 "": "...その後、ディレクトリに切り替えて~/Documents/dir2そこにあるすべてのアイテムをアーカイブしてください..."
  • -C ~/dir3/dir4/dir5 "":「…そして最後に~/dir3/dir4/dir5そこに切り替えても何も保存されません」

おそらく次のようなものが欲しいでしょう。

tar -czf test1.tar.gz -C ~/Downloads/dir1 . -C ~/Documents/dir2 . -C ~/dir3/dir4/dir5 .

これは、「保存しない」部分を「現在のディレクトリの内容をアーカイブする」に置き換え、その-Cオプションを使用するように切り替えました。

結果アーカイブを抽出すると、dir1dir2のアーカイブ内容がdir5すべて抽出当時現在のディレクトリに抽出されます。欲しいものなら大丈夫ですが、少し珍しいユースケースです。 (これらのアーカイブタール爆弾通常、抽出プロセスによって生成された単一のディレクトリにきれいに抽出されないため、予期せず発生する場合は通常嫌いです。 )

説明を簡単にするために、少し異なるコマンドを使用します。

tar -czf test2.tar.gz -C ~/Downloads dir1 -C ~/Documents dir2 -C ~/dir3/dir4 dir5

抽出すると、test2.tar.gz次のような結果になります。

./dir1
./dir2
./dir5

...そしてその内容。

答え2

tar処理するファイルパラメータを指定していません。

指定したファイル引数が存在しないか空の文字列の場合は、tar印刷しno such file or directoryて終了します。欠落しているパラメータの場合は、対応するエラーを印刷します。


たぶん混乱して、これが-C入力ファイルを定義していると思ったかもしれません。しかし、実際にはそうではありません。-Cディレクトリのみが変更され、指示の順序が-C重要です。

-C, --directory=DIR
    Change to DIR before performing any operations. This option is 
    order-sensitive, i.e.  it  affects  all options that follow.

ディレクティブの後に続くファイルパラメータの相対パスを取得するために使用されます-C

おそらくあなたは以下が欲しいでしょう:

tar -czf test1.tar.gz ~/Downloads/dir1 ~/Documents/dir2 ~/dir3/dir4/dir5

答え3

IMHO、アーカイブファイルへの絶対(一種の)パスを提供するのは良い考えではありません。次のコマンドを使用することをお勧めします。

tar -czf /tmp/test1.tar.gz Downloads/dir1 Documents/dir2 dir3/dir4/dir5

後でファイルを抽出すると、ディレクトリ内にサブディレクトリが作成されます。現在のあなたのディレクトリではなくディレクトリ目次

関連情報