アーカイブを作成しようとしています。
$ 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.gz
test1.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
オプションを使用するように切り替えました。
結果アーカイブを抽出すると、dir1
とdir2
のアーカイブ内容が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
後でファイルを抽出すると、ディレクトリ内にサブディレクトリが作成されます。現在のあなたのディレクトリではなくディレクトリ家目次