圧縮ファイルの一部だけを抽出したい

大きな圧縮ファイルから特定のファイルだけを抽出したい場合がある。全体を展開すると時間がかかったり、不要なファイルがゴミとなったりするため、必要なファイルだけを取り出したい。

tarで特定のファイルだけを抽出する

tarコマンドで特定のファイルだけを抽出するには、抽出したいファイルのパスを引数に指定する。

tar -xf archive.tar.gz path/to/file

複数ファイルを抽出したい場合は、スペース区切りで複数のファイルパスを指定する。

tar -xf archive.tar.gz path/to/file1 path/to/file2

具体例

以下のような構造のtar.gzファイルがあるとする。

myproject/
├── src/
│   ├── main.go
│   └── utils.go
├── config/
│   └── app.yaml
└── README.md

この中からconfig/app.yamlだけを抽出する。

tar -xf myproject.tar.gz myproject/config/app.yaml

実行すると現在のディレクトリにmyproject/config/app.yamlが展開される。

パターンマッチで複数ファイルを抽出

ワイルドカードを使って複数のファイルを抽出できる。

tar -xf myproject.tar.gz myproject/src/*.go

myproject/src/配下の.goファイルすべてが抽出される。
*はディレクトリ区切り文字も含めてマッチするためサブディレクトリも対象となる。

ディレクトリごと抽出

ディレクトリ名を指定するとそのディレクトリ配下すべてが抽出される。

tar -xf myproject.tar.gz myproject/src/

unzipで特定のファイルだけを抽出する

unzipコマンドで特定のファイルだけを抽出するには、抽出したいファイルのパスを引数に指定する。

unzip archive.zip path/to/file

複数ファイルを抽出したい場合は、スペース区切りで複数のファイルパスを指定する。

unzip archive.zip path/to/file1 path/to/file2

具体例

以下のような構造のzipファイルがあるとする。

myproject/
├── src/
│   ├── index.html
│   └── style.css
├── assets/
│   └── logo.png
└── README.md

この中からassets/logo.pngだけを抽出する。

unzip myproject.zip myproject/assets/logo.png

実行すると現在のディレクトリにmyproject/assets/logo.pngが展開される。

パターンマッチで複数ファイルを抽出

ワイルドカードを使って複数のファイルを抽出できる。

unzip myproject.zip 'myproject/src/*'

*はディレクトリ区切り文字も含めてマッチするためサブディレクトリも対象となる。

特定の拡張子のファイルを抽出

特定の拡張子のファイルすべてを抽出する場合は以下のようにする。

unzip myproject.zip '*.css'

.cssファイルすべてが抽出される。