警告

本資料は参考情報として提供されています。内容についてのご質問には必ずしもお答えできない可能性がございます。

5. ファイルのダウンロードと圧縮・展開#

ここでは、LinuxのCLI環境におけるファイルのダウンロードと、圧縮・展開について記述します。

早見表#

操作

コマンド

ファイルのダウンロード

wget [URL],curl -O [URL]

圧縮ファイルの種類

gzip

.gz

bzip2

.bz2

xz

.xz

ファイルの圧縮

gzip,bzip2,xz

ファイルの展開

gzip -d,bzip2 -d,xz -d

圧縮ファイルの中身を出力

zcat,bzcat,xzcat

tarファイルの作成

tar cf[zjJ] archive.tar[.*] files...

tarファイルの展開

tar xf archive.tar[.*]

tarでの圧縮形式の指定

gzip

z

bzip2

j

xz

J

5.1. ファイルのダウンロード#

ファイルのダウンロードには、curlもしくはwgetコマンドがよく使われます。wgetの方が高機能でよく使われる傾向にあります。

警告

よく使われる公共データはスパコン内で共用できるようダウンロード済みの場合があります。データベースのリストを確認の上、必要な場合のみ手元にダウンロードしていただきますようよろしくお願いいたします。

注釈

ToMMoスパコンにおいてインターネットからファイルのダウンロードが可能なのはUnit Aのみとなっています。また、Unit Aでこの節のコマンドを試す時には以下のコマンドをあらかじめ実行してください。

export https_proxy=http://epx3x01:8080
export http_proxy=http://epx3x01:8080

Unit B/Cではデータの持ち込みが必要です。

注釈

Unit Aと手元の端末とのデータ転送は、Unit Aとインターネットにつながった手元の端末でデータを転送する方法をご覧ください。

5.1.1. curl#

curlコマンドは引数で指定されたURLからファイルをダウンロードします。デフォルトでは標準出力にファイルを出力します。

curl [options] URL [URL...]
-o <file>#

指定した名前でファイルを保存

-O#

元のファイル名でファイルを保存

-#, --progress-bar#

ダウンロードの進捗をプログレスバーで表示

-s, --silent#

ダウンロードの進捗やエラーメッセージを表示しない

-S, --show-error#

-sと一緒に使われた時、エラーメッセージは表示する

-L, --location#

リンク先がリダイレクトだった場合にリダイレクト先をダウンロードする

$ export https_proxy=http://epx3x01:8080
$ curl -s https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/p13/hg38.p13.chrom.sizes | head -5
chr1 248956422
chr2 242193529
chr3 198295559
chr4 190214555
chr5 181538259
$ curl -O https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/p13/hg38.p13.chrom.sizes
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100 16744  100 16744    0     0  28769      0 --:--:-- --:--:-- --:--:-- 28769
$ ls
hg38.p13.chrom.sizes

5.1.2. wget#

wgetコマンドも引数で指定されたURLからファイルをダウンロードします。デフォルトでファイルに保存します。

wget [options] URL [URL...]
-O <file>#

指定した名前でファイルを保存

-P <prefix>#

指定したディレクトリにファイルを保存

-N#

ダウンロードしたファイルが既に存在する場合、タイムスタンプを確認して、ダウンロード先のファイルが更新されていた場合のみダウンロードする

-q, --quiet#

ダウンロードの進捗やエラーメッセージを表示しない

$ wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/p13/hg38.p13.chrom.sizes
--2022-03-11 14:05:17--  https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/p13/hg38.p13.chrom.sizes
Resolving proxy.l2.med.tohoku.ac.jp... 172.30.2.11, 172.30.2.10
Connecting to proxy.l2.med.tohoku.ac.jp|172.30.2.11|:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 16744 (16K)
Saving to: ‘hg38.p13.chrom.sizes’

hg38.p13.chrom.sizes     100%[======================================>]  16.35K  --.-KB/s    in 0.1s

2022-03-11 14:05:18 (148 KB/s) - ‘hg38.p13.chrom.sizes’ saved [16744/16744]

$ wget -q -O - https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/p13/hg38.p13.chrom.sizes | head -5
chr1 248956422
chr2 242193529
chr3 198295559
chr4 190214555
chr5 181538259

5.2. 圧縮と展開#

ネットワーク越しにやりとりされるファイルや、ファイルサイズが大きく使用頻度の低いファイルなどは、転送時間やディスク容量の節約のために圧縮されたり、複数のファイルが1つのファイルにまとられたりする場合があります。こういったファイルを使用するには、ダウンロード後、元のファイルに展開する必要があります。

5.2.1. CompressorとArchiver#

CLIに馴染みのない人にとって、圧縮ファイルといえばZIP形式かもしれません。しかしLinux環境でZIP形式が使われることは稀で、その理由の1つはArchiverとCompressorが区別されている点にあります。

Archiver(アーカイバ)はLinux環境の文脈では、複数のファイルを1つのファイルに集約したり、まとめたファイルを元に戻したりするプログラムです。Archiverそのものはデータを圧縮する機能を持たず、圧縮したい場合はCompressorと組み合わせることで行います。

Compressorは、ファイルやデータを圧縮・解凍するプログラムです。Linux環境のCompressorは、単に与えられたファイルやデータの圧縮・解凍のみを行い、Archiverの機能は持ちません。

Windows環境のZipや7-Zipは、ArchiverとCompressorの機能を併せ持っています。一方Linux環境では、Archiverとしてはtarが最も一般的であり、Compressorは圧縮率や処理にかかる負荷などを考慮し、状況に応じて使い分けられる傾向があります。

5.2.2. Compressor#

CompressorはFASTQファイルのように、単一の大きなファイルを圧縮してディスク容量を節約する場合にもよく用いられます。

主なCompressorの種類#

名前(コマンド)

拡張子

特徴

使用例

gzip

.gz

Linux環境では最も一般的

一般的な圧縮

bzip2

.bz2

gzipより高圧縮

展開する頻度が少なくファイルサイズが大きい

xz

.xz

gzipよりさらに高圧縮

容量に制約がありできるだけファイルを圧縮したい時

lz4

.lz4

gzip2より圧縮率は低いが、圧縮・展開処理が速い

一時的なデータ転送

圧縮率が良いCompressorはその分、圧縮や展開に時間がかかったり、メモリを多く消費します。圧縮率と圧縮・展開時の負荷はトレードオフの関係になっており、比較的バランスの取れたgzipがデファクトスタンダードとして広く使われています。

5.2.2.1. Compressorのオプション#

Compressorは引数やオプションの意味が共通なことが多く、挙動の似ているコマンドです。例えば次の例で示すファイルの圧縮と解凍は、gzipコマンドをbzip2xzコマンドに置き換えても(拡張子が変わることを除けば)同様にふるまいます。

$ gzip chr1.fasta  # ファイルを圧縮
$ gzip -d chr1.fasta.gz  # ファイルを展開

警告

上記のコマンドの場合、ファイルの圧縮・展開どちらも元のファイルは削除されます。

元のファイルも残したい場合、-kオプションを使うか、ファイルを標準入力から入力します。また、解凍の場合は、後述する*catコマンドも元ファイルを変更しません。

$ ls
chr1.fasta
$ bzip2 chr1.fasta
$ ls
chr1.fasta.bz2
$ bzip2 -d chr1.fasta.bz2
$ ls
chr1.fasta
$ xz -k chr1.fasta  # `xz < chr1.fasta > chr1.fasta.xz`でも同じ
$ ls
chr1.fasta    chr1.fasta.xz
-k, --keep#

圧縮・解凍対象のファイルを残す

-c, --stdout, --to-stdout#

元のファイルは変更せずに標準出力に出力する

-d, --decompress, --uncompress#

展開する

-l, --list#

圧縮されたファイルの情報を表示する

-1, -2, ..., -9#

圧縮率を指定する(末尾付記参照)

--fast#

-1と同じ

--best#

-9と同じ

Compressorはフィルタとして動作します。

$ gzip -d < gencode.v19.gtf.gz | grep "^chr1"$'\t' | gzip > gencode.v19.chr1.gtf.gz

5.2.2.2. Compressorの関連コマンド#

ファイルの解凍や、それを標準出力に出力することは頻繁にあるため、Compressorごとにショートカット用のコマンドが用意されています。例えばzcatコマンドはgzipで圧縮されたファイルに対するcatコマンドのようにふるまいます。

Compressorの関連コマンド#

Compressor

解凍(-dと同じ)

解凍して出力(-d -cと同じ)

gzip

gunzip

gzcat

bzip2

bunzip2

bzcat

xz

unxz

xzcat

lz4

unlz4

lz4cat

$ # `gzip -d < gencode.v19.gtf.gz` や `gzip -dc gencode.v19.gtf.gz` と同じ
$ zcat gencode.v19.gtf.gz | grep "^chr1"$'\t' | gzip > gencode.v19.chr1.gtf.gz
$ zcat gencode.v19.chr1.gtf.gz | head
...

5.2.3. Archiver#

5.2.3.1. tar#

tarはLinux環境で最も一般的なArchiverです。tarコマンドでは、伝統的にダッシュでオプションを指定しない変則的な表記が用いられます。現在ではダッシュを用いた表記でも動作しますが、本資料では一般的な記法で統一します。

tar [FLAG] [FILES...]

FLAGには操作モードを必ず1つ指定します。

tar の主な操作モード#

操作モード

説明

c

アーカイブを作成する

x

アーカイブを展開する

t

アーカイブに含まれるファイルの一覧を表示する

FILESは格納・展開するファイルを指定します。アーカイブファイル(*.tar)の指定は別のオプションで行います。

$ ls
chr1.fa  chr12.fa chr15.fa chr18.fa chr20.fa chr3.fa  chr6.fa  chr9.fa  chrY.fa
chr10.fa chr13.fa chr16.fa chr19.fa chr21.fa chr4.fa  chr7.fa  chrM.fa
chr11.fa chr14.fa chr17.fa chr2.fa  chr22.fa chr5.fa  chr8.fa  chrX.fa
$ tar c chr[1-9]*.fa > autosomes.tar
$ tar t < autosomes.tar | head -5
chr1.fa
chr10.fa
chr11.fa
chr12.fa
chr13.fa
$ mkdir autosomes
$ cd autosomes/
$ tar x chr1.fa < ../autosomes.tar
$ ls
chr1.fa
$ tar x < ../autosomes.tar  # 展開対象のファイル名を省略すると全て展開される

この例のようにアーカイブファイルは標準入力から渡せますが、通常はfオプションで指定します。

$ tar cf autosomes.tar chr[1-9]*.fa  # tar c chr[1-9]*.fa > autosomes.tar
$ tar tf autosomes.tar  # tar t < autosomes.tar
$ tar xf autosomes.tar  # tar x < autosomes.tar

また、vオプションを付加すると処理したファイルを出力します。

$ tar cvf allosomes.tar chr[XY].fa
chrX.fa
chrY.fa
$ tar xvf allosomes.tar
chrX.fa
chrY.fa

5.2.3.2. Compressorと組み合わせる#

複数のファイルを配布したりバックアップする際は、圧縮されたアーカイブファイルにするのが一般的です。アーカイブファイルを圧縮する場合は、Archiverで1つにまとめてから圧縮されることがほとんどで、これは個別のファイルを解凍する手間を省くのと、ファイルを個別に圧縮するより大きなデータを圧縮する方が効率的な場合が多いためです。圧縮されたtarファイルには、拡張子.tarに圧縮に用いたCompressorに対応する拡張子を続けて付与します。

$ tar c chr[1-9]*.fa | gzip > autosomes.tar.gz
$ ls -lh autosomes.tar autosomes.tar.gz
-rw-r--r--  1 project__personal-id  project  2.7G  4 1 15:15 autosomes.tar
-rw-r--r--  1 project__personal-id  project  446M  4 1 15:44 autosomes.tar.gz
$ zcat autosomes.tar.gz | tar x

ヒント

.tar.gz.tgzと書かれていることがあります。

このようにパイプを用いることで任意のCompressorを使うことができますが、よく使われるCompressorはtarのオプションから利用することができます。

tar のオプションが対応している主なCompressor#

オプション

説明

z

gzipを使う

j

bzip2を使う

J

xzを使う

$ tar czf autosomes.tar.gz chr[1-9]*.fa
$ tar xzf autosomes.tar.gz

ヒント

比較的新しいtarでは、 展開時に圧縮フォーマットを自動で判別するため、Compressorのオプションを省略することができます。

5.2.3.3. zip#

Linux環境でZIPファイルを扱う場合は、zipおよびunzipコマンドを使用します。詳細は各コマンドのヘルプやmanページをご確認ください。

zip [OPTIONS] Archive.zip [FILES...]
unzip Archive.zip [FILES...]

注釈

ZIP形式における圧縮は、gzipと同じ圧縮方法が用いられています。

5.2.4. 付記:Compressorの圧縮率の指定について#

注釈

Compressorはオプションで圧縮率を指定できますが、その効果は限定的です。例えば、一般的なテキストファイルとしてGTFファイルの1つを圧縮した際のファイルサイズとそれにかかる時間は次のようになります。

../../_images/gtf-comprate.png ../../_images/gtf-comptime.png

デフォルトでは、gzipとxzが-6、bzip2が-9、lz4が-3です。圧縮率を高めようとした場合、ファイルサイズの減少量と比較して圧縮にかかる時間の方がより増える傾向にあります。

これは比較的複雑で圧縮しにくいファイル(例えば塩基配列)でも同様です。次の結果は、ヒトリファレンスゲノムの1番染色体を圧縮した結果です。

../../_images/ntseq-comprate.png ../../_images/ntseq-comptime.png

多くの場合、圧縮率はデフォルトのままで十分な性能を得られます。