今回のお題
今回のお題はファイルの圧縮と展開です。
Linuxコマンドを用いてファイルの圧縮・展開を行う方法、及びそれらを取り巻く細かな仕様について調べた範囲でまとめます。
なお、ファイルの圧縮・展開に関してはたくさんのオプションがあるようですが、今回は基本となるcvzf
とxvzf
にしか触れません。
その点についてはご了承ください。
ファイルの圧縮の方法
# tar cvzf "作成する圧縮ファイル名" "元にするファイル"
% tar cvzf test1.php.tar.gz test.php
ファイルの展開方法
# tar xvzf "展開するファイルのパス"
% tar xvzf test1.php.tar.gz
ファイルの展開先
ファイルを展開した際には、圧縮作業を行ったディレクトリではなく、その時点でのカレントディレクトリに展開後のファイルが作られる。
ディレクトリ例
|-- dir1
| |-- test1.txt
|
|-- dir2
% cd dir1
% tar cvzf test1.txt.tar.gz test1.txt
% ls
>> test1.txt test1.txt.tar.gz
# dir2に移動
% cd ../dir2
# dir2で展開作業を実行
% tar xvzf test1.txt.tar.gz
% ls
# 展開を行ったdir2にtest1.txtが作成される
>> test1.txt
% ls ../dir1
# 展開を行っても圧縮ファイルは削除されない
>> test1.txt test1.txt.tar.gz
展開後のファイル名について
# 展開後のファイル名は圧縮前と同じ
% cd dir1
% tar cvzf test1.txt.tar.gz test1.txt
% ls
>> test1.txt test1.txt.tar.gz
# dir2に移動
% cd ../dir2
# dir2で展開作業を実行
% tar xvzf test1.txt.tar.gz
% ls
# 展開を行ったdir2にtest1.txtが作成される
>> test1.txt # ファイル名は圧縮前と同じ
# dir1に移動
% cd ../dir1
% ls
>> test1.txt test1.txt.tar.gz
# dir1内でtest1.txtを展開
% tar xvzf test1.txt.tar.gz
% ls
# 展開後のtest1.txtで元々あったtest1.txtが上書きされるので、見た目上は同じ(もしtest1.txtに何か変更が加わっていた場合には、圧縮前の状態に戻る)。
>> test1.txt test1.txt.tar.gz
圧縮ファイルの作成先
# 圧縮ファイル名を単純にファイル名にした場合にはカレントディレクトリに圧縮ファイルが作られる
% tar cvzf test1.txt.tar.gz test1.txt
# カレントディレクトリにtest1.txt.tar.gzが作られる
# 圧縮ファイル名としてパスを与えた場合にはそのパスに対応した箇所に圧縮ファイルが作られる
% tar cvzf /var/www/html/test1.txt.tar.gz test1.txt
# /var/www/html/にtest1.txt.tar.gzが作られる
# パスは相対・絶対のどちらも可能だが、存在しないディレクトリは指定不可(=圧縮ファイルと同時に親ディレクトリを作成することはできない)。
カレントディレクトリ以外のファイルを圧縮する場合
元にするファイル名の代わりにパスを指定することでカレントディレクトリに存在しないファイルを圧縮することも可能だが、その場合には末端のファイルだけではなくパス全体が展開される。
% cd ..
# dir1のtest1.textを圧縮し、dir2に保存
% tar cvzf dir2/test1.txt.tar.gz dir1/test1.txt
# dir2に移動
% cd dir2
# ファイルを展開
% tar xvzf test1.txt.tar.gz
# dir2の中にdir1が、その中にtest1.txtが作られる
% ls
>> dir1
% ls dir1
>> test1.txt