警告
本資料は参考情報として提供されています。内容についてのご質問には必ずしもお答えできない可能性がございます。
5. ファイルのダウンロードと圧縮・展開¶
ここでは、LinuxのCLI環境におけるファイルのダウンロードと、圧縮・展開について記述します。
操作 |
コマンド |
||||||
ファイルのダウンロード |
|
||||||
圧縮ファイルの種類 |
|
||||||
ファイルの圧縮 |
|
||||||
ファイルの展開 |
|
||||||
圧縮ファイルの中身を出力 |
|
||||||
tarファイルの作成 |
|
||||||
tarファイルの展開 |
|
||||||
tarでの圧縮形式の指定 |
|
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ファイルのように、単一の大きなファイルを圧縮してディスク容量を節約する場合にもよく用いられます。
名前(コマンド) |
拡張子 |
特徴 |
使用例 |
gzip |
|
Linux環境では最も一般的 |
一般的な圧縮 |
bzip2 |
|
gzipより高圧縮 |
展開する頻度が少なくファイルサイズが大きい |
xz |
|
gzipよりさらに高圧縮 |
容量に制約がありできるだけファイルを圧縮したい時 |
lz4 |
|
gzip2より圧縮率は低いが、圧縮・展開処理が速い |
一時的なデータ転送 |
圧縮率が良いCompressorはその分、圧縮や展開に時間がかかったり、メモリを多く消費します。圧縮率と圧縮・展開時の負荷はトレードオフの関係になっており、比較的バランスの取れたgzipがデファクトスタンダードとして広く使われています。
5.2.2.1. Compressorのオプション¶
Compressorは引数やオプションの意味が共通なことが多く、挙動の似ているコマンドです。例えば次の例で示すファイルの圧縮と解凍は、gzip
コマンドをbzip2
やxz
コマンドに置き換えても(拡張子が変わることを除けば)同様にふるまいます。
$ 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 |
解凍( |
解凍して出力( |
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つ指定します。
操作モード |
説明 |
|
アーカイブを作成する |
|
アーカイブを展開する |
|
アーカイブに含まれるファイルの一覧を表示する |
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
のオプションから利用することができます。
オプション |
説明 |
|
gzipを使う |
|
bzip2を使う |
|
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つを圧縮した際のファイルサイズとそれにかかる時間は次のようになります。
デフォルトでは、gzipとxzが-6
、bzip2が-9
、lz4が-3
です。圧縮率を高めようとした場合、ファイルサイズの減少量と比較して圧縮にかかる時間の方がより増える傾向にあります。
これは比較的複雑で圧縮しにくいファイル(例えば塩基配列)でも同様です。次の結果は、ヒトリファレンスゲノムの1番染色体を圧縮した結果です。
多くの場合、圧縮率はデフォルトのままで十分な性能を得られます。