Linux/コマンド/tar

Linux/コマンド/tar

解凍する機会は多いが、圧縮は少ないのでmemo

解凍する

定番である

$ tar xzvf hogehoge.tar.gz

通常ならばカレントディレクトリに

圧縮する

ファイルを圧縮する

$ tar czf hogehoge.tar.gz hogehoge

ディレクトリを圧縮する これには注意が必要で、特に圧縮対象をフルパス指定しないことが重要になる。 多分現代の tar コマンドの場合フルパス指定しても、ファイル自体はそれを圧縮してくれるが、 アーカイブの際に、先頭のスラッシュを除去してフルパス展開できないようになっている。

なので、ズラズラとのルートからのディレクトリ階層が、アーカイブに含まれてしまい、展開した時邪魔になる。

しかし、ターミナルからではなくて、スクリプトとして実行する時に勝手が悪い

このような場合は C オプションを使う。これで圧縮時に cd したかのように振る舞ってくれる。

$ tar czf hogehoge.tar.gz -C /home/piyo/fuga hogehoge

この場合なら /hoge/piyo/fuga ディレクトリ中の hogehoge ディレクトリ(も含め)の、その中身を hogehoge.tar.gz という名前で圧縮する。

hogehoge ディレクトリ中で除外したいディレクトリがある場合、このように書く

$ tar czf hogehoge.tar.gz --exclude hogehoge/piyopiyo --exclude hogehoge/fugafuga -C /home/piyo/fuga hogehoge

ポイントは C オプションで指定したディレクトリからの相対パスで指定する、複数あるなら都度 exclude オプションを書くである。

Mac 版 tar の注意点

これは Linux では無いのだが Mac 版の tar で圧縮して、Linux 版で解凍するとよく起こる問題なのでメモしておく。

Mac には「カタログファイル」とか「リソースフォークファイル」とか言われる、Mac上でしか使わない情報を格納した隠しファイルが各ファイル対に存在している。

Mac 版の tar で固めた場合、ご丁寧にこれも固めてくれて、Linux 版で展開すると何だこれ?という話になる。

_.hogehoge.txt

のような、「アンダースコアピリオド(アンスコピリオド、アンダーバーピリオド、アンダースコアドット、アンスコドット、アンダーバードット)」が頭にくっついているファイルになる。

このファイルは自分の所で確認したところすべて 226 byte になっていた。これは環境によって違うかも。

とにかくこの Linux 側で使えないゴミをもらってもしょうがないので、こいつを除外して圧縮する方法がある。

$ COPYFILE_DISABLE=1 tar zcfv hogehoge.tar.gz --exclude='.DS_Store' hogehoge

これで OK。

linux/command/tar.txt · 最終更新: 2018-03-02 09:31 by ore