14.6.3. ファイルの圧縮
圧縮と復元 (伸張) の方法として、二つの流儀が使われています。細かい指示の方法や性能が少し違いますが、機能はおおむねどちらも同じです。ECCS iMac端末ではどちらも使えます。
以下は、圧縮と対応する復元方法を順に紹介しますが、手っ取り早く復元するだけなら最後に紹介する unar
がお勧めです。
以下の流儀1と2の番号は、このページの説明でつけたもので、一般的な意味はありません。
流儀1 | 流儀2 | |
---|---|---|
圧縮と復元 | gzip, bzip2, xz | zip |
アーカイブ | tar | zip |
ターミナルで 13. コマンドの基本 の内容を使います。
サンプルファイル #
次の 3 つのファイルを自分のディレクトリにダウンロードしてください。それぞれのファイル名を、マウスの右ボタンでクリックして、出てきたメニューから、リンク先のファイルを別名でダウンロードを選びます (ダウンロード先は自分で適当に決めましょう)。
- text-1.txt 日本国憲法前文 (英語版) 先頭1000バイト
冒頭はWe, the Japanese people
… - text-2.txt
text-1
を文字毎にASCII順に並び替えたもの
(冒頭は改行と空白文字です) - text-3.txt ASCII印字可能文字 (改行やタブなど一部の制御文字を含む) をランダムに1000バイト
冒頭は{Cyy%V1Q
…
ls
コマンドによって、どのファイルも大きさが 1000 バイトであることが分かります。
-rw------- 1 1230045600 student 1000 Mar 26 14:30 text-1.txt
-rw------- 1 1230045600 student 1000 Mar 26 14:30 text-2.txt
-rw------- 1 1230045600 student 1000 Mar 26 14:30 text-3.txt
ファイルをテキストエディタなどアプリケーションで開くと、 付加情報が設定され、それも一緒に圧縮されて圧縮後のファイルが大きくなることがあります。 このことは上記の ls の結果が
-rw-------@
など末尾に@
がつくことから判別できますxattr -c text-3.txt
などで消せますが、いったん消してからダウンロードし直しても良いです。25.6.4. パーミッションと実行ファイル
これらを圧縮してみます。
ファイル1つの圧縮と復元 #
はじめに、ファイル1つの圧縮と復元を試しましょう。
流儀によって使い方に多少差があるので、gzip
と zip
を例に説明します。
流儀 | 圧縮 | 復元 | 復元 | 拡張子 |
---|---|---|---|---|
1 | gzip | gunzip | gzip -d | .gz |
1 | bzip2 | bunzip2 | bzip2 -d | .bz2 |
1 | xz | unxz | xz -d | .xz |
2 | zip | unzip | .zip |
gzip で圧縮 #
使い方は簡単でコマンド gzip
に続けて、
対象ファイルパスをパラメータで渡します。
すると元のファイルが消え、拡張子 .gz
を付与した新しいファイル、filename.gz
が生成されます。
次のように、3 つのファイルを圧縮してから、サイズを比較してみましょう。
これらのコマンドも、成功すると無言です。エラーが出たときのみ、メッセージが表示されます。
-rw------- 1 1230045600 student 511 Mar 26 14:35 text-1.txt.gz
-rw------- 1 1230045600 student 104 Mar 26 14:35 text-2.txt.gz
-rw------- 1 1230045600 student 878 Mar 26 14:35 text-3.txt.gz
元のファイルはいずれも同じ 1000 バイトであったのに、圧縮率に差が生じました。 文字の並びがランダムに近いほど短い符号化が難しいことと、整合しています。
復元するには伸張用のコマンド gunzip
によって、圧縮されたファイル filename.gz
を元のファイル filename
に戻します。
-rw------- 1 1230045600 student 1000 Mar 26 14:35 text-1.txt
-rw------- 1 1230045600 student 1000 Mar 26 14:35 text-2.txt
-rw------- 1 1230045600 student 1000 Mar 26 14:35 text-3.txt
様々なオプションがあり、圧縮率と計算時間のトレードオフを調整したり (-9
が圧縮率最高です)、
元ファイルを消さずに新規にファイルを作ったりもできます。
bzip2
や xz
も使い方は同じです。圧縮率が高い代わりに計算時間も長くなります。
zip で圧縮 #
zip
はパラメータを二つ取り、前者が作成する .zip
のファイル名、後者が対象ファイルのパスです。
指定した名前の新しいファイル、filename.zip
が生成されます。元のファイルは消えません。
次のように、3 つのファイルを圧縮して、サイズを比較してみましょう。
-rw------- 1 1230045600 student 663 Mar 26 14:40 text-1.txt.zip
-rw------- 1 1230045600 student 256 Mar 26 14:40 text-2.txt.zip
-rw------- 1 1230045600 student 1130 Mar 26 14:40 text-3.txt.zip
この場合でも、ファイル毎に圧縮率に差が生じました。悪いことに text-3.txt
は増えてしまっています。
復元は unzip
を使います。
元のファイルがなくても復元できることを試すために、もとの text-1.txt
などは事前にゴミ箱などに移動してください。
元のファイルが存在するときに復元しようとすると、上書きしてよいかどうかreplace text-1.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:
のように質問されます。答えはynANr
のいずれかを答えます。
元ファイルが復元されたことを ls
やエディタで確認してください。
複数のファイルやフォルダの圧縮 #
フォルダをまとめて圧縮する場合、フォルダ内の「隠しファイル」や「隠しフォルダ」なども同梱されます。他者に渡すときなどは注意しましょう。
tar でまとめて圧縮 #
tar
コマンドを使うと、複数のファイルやフォルダを 1 つにまとめて、さらに gzip
で圧縮をすることができます。圧縮の際には czf
というオプションを指定して使います。c
がまとめるという操作を指定し、z
が gzip による圧縮であることを表します。そして f
の後に、対象となるファイルを指定します。
以下のようにして、file.tar.gz というファイルに 3 つのファイルをまとめて圧縮しましょう。
-rw------- 1 1230045600 student 1657 Mar 26 15:00 text-all.tar.gz
元のファイルもそのまま残っています
ファイル名やファイルのつなぎ目を表す情報などが含まれるために、ファイルサイズが、それぞれのファイルを圧縮して足し合わせたもの (511+104+878=1493) よりは、大きくなります。
元のファイルを取り出すには、オプションで、c
の代わりに x
を指定します。
元のファイルがなくても復元できることを試すために、もとの text-1.txt
などは事前にゴミ箱などに移動してください。
復元されたことを確認してください。
オプションのz
をj
やJ
に変更すると、圧縮に bzip2 や xz が使われます。
zip でまとめて圧縮 #
zip
コマンドも、パラメータとしてファイルを複数与えることができます。
ここでは使いませんが、フォルダをまとめるときは -r
オプションを使います。
復元方法は unzip
で、ファイル1つの時と同じです。
Zipでの圧縮は、GUI でも可能です 11.9. アーカイブ 。
復元前の確認 #
tar
や unzip
でファイルを取り出す前に、どのファイルが取り出されるのか確認すると安全です。
そのために tar tzf
や unzip -l
というコマンドが用意されています。
text-1.txt
text-2.txt
text-3.txt
Archive: text-all.zip
Length Date Time Name
--------- ---------- ----- ----
1000 03-26-2023 15:00 text-1.txt
1000 03-26-2023 15:00 text-2.txt
1000 03-26-2023 15:00 text-3.txt
--------- -------
3000 3 files
unar #
unar
を使うと、さまざまなアーカイブ形式や圧縮形式を気にせず解凍できます。実用的にはこちらが便利でお勧めします。
アーカイブの内容は lsar
で確認します。
text-all.tar.gz: Tar in Gzip
text-1.txt
text-2.txt
text-3.txt
text-all.zip: Zip
text-1.txt
text-2.txt
text-3.txt
unar は homebrew などでインストール可能です。