タイトルの通り。
どういうことかというと次のようなディレクトリ構造をもったプロジェクトがあったとする。
. ├── dest │ └── hoge └── src └── config └── dev.yml
このディレクトリを圧縮して解凍した時のディレクトリにはhoge
, dev.yml
が同じディレクトリに展開したい。
同じ階層であれば解凍する時に--strip-components
を指定すれば良いが今回のように片方は1階層、もう片方は2階層とかするとこれを使うことは出来ない。
これが1つのディレクトリであればtar -zcvf hoge.tar.gz -C src/config .
とかすれば解凍した時にdev.ymlが出るので良いが複数ディレクトリではどうしたら良いのか。。。
答え
$ tar -zcvf hoge.tar.gz -C dest . -C ../src/config .
tarのヘルプでCオプションを見てみると中身的には指定されてディレクトリに移動しているだけ。
なので2個目を指定する時は1つ前のCオプションで移動したディレクトリの相対パスなんですね。
※ 両方とも絶対パスで指定でもいけます
$ tar --help | grep "\-\C" Create: tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ] -C <dir> Change to <dir> before processing remaining files
最後に
今回はtarで複数のディレクトリを起点として圧縮する方法を紹介しました。