Linuxで.tar.bz2または.tar.gzファイルからファイルを抽出する方法

  • Tarファイルは、UbuntuのようなLinuxディストリビューションで使用される圧縮アーカイブです。ターミナルでtarコマンドを使用して抽出できます。
  • .tar.gzと.tar.bz2の拡張子は、tarファイルがgzipまたはbzip2圧縮アルゴリズムを使用して圧縮されていることを示しています。
  • tarファイルからファイルを抽出するには、圧縮の種類に応じて、オプション-x、-v、および-z(.gz)または-j(bz2)を指定してtarコマンドを使用します。抽出されたファイルは、-Cオプションを使用して特定のディレクトリに転送できます。

Tarファイルは圧縮アーカイブです。UbuntuのようなLinuxディストリビューションを使用しているとき、またはmacOSでターミナルを使用しているときでも、頻繁に遭遇します。tarファイル、別名tarballの内容を抽出(または展開)する方法を説明します。

.tar.gzと.tar.bz2の意味

.tar.gzまたは.tar.bz2拡張子を持つファイルは、圧縮アーカイブファイルです。.tar拡張子のみのファイルは圧縮されていませんが、そのようなファイルは非常にまれです。

ファイル拡張子の.tar部分はtapearchiveの略で、この2つのファイルタイプがtarファイルと呼ばれる理由です。tarファイルは、1979年にtarコマンドが作成され、システム管理者がファイルをテープにアーカイブできるようになったことに端を発します。40年後、私たちはまだtarコマンドを使用してtarファイルをハードドライブに抽出しています。どこかで誰かがまだtarとテープを使用しているでしょう。

.gzまたは.bz2拡張子のサフィックスは、gzipまたはbzip2圧縮アルゴリズムを使用してアーカイブが圧縮されていることを示します。tarコマンドはどちらの種類のファイルでも正常に機能するため、どの圧縮方法が使用されたかは関係ありません。Bashシェルがある場所ならどこでも使用できるはずです。適切なtarコマンドラインオプションを使用するだけです。

この記事のすべては、Windows 10またはWindows 11にBashシェルをインストールできるLinux用のWindowsサブシステムでも機能することに注意してください。ただし、Windowsでtar.gzファイルを開く方法は他にもあります。

Tarファイルからファイルを抽出する

楽譜のファイルを2つダウンロードしたとします。1つはukulele_songs.tar.gzというファイルで、もう1つはguitar_songs.tar.bz2というファイルです。これらのファイルはダウンロードディレクトリにあります。

ウクレレの曲を抽出(抽出の代わりに「展開」と呼ばれることもあります)してみましょう。

tar -xvzf ukulele_songs.tar.gz

ファイルが抽出されると、ターミナルウィンドウに一覧表示されます。

使用したコマンドラインオプションは次のとおりです。

  • -x:tarファイルからファイルを抽出します。
  • -v:展開されたファイルのリストを表示します。
  • -z:tarファイルを解凍するためにgzipを使用します。
  • -f:tarが処理するtarファイルの名前です。このオプションの後ろには必ずtarファイルの名前を指定する必要があります。

lsを使用してディレクトリ内のファイルをリストすると、ウクレレの曲という名前のディレクトリが作成されていることがわかります。抽出されたファイルはそのディレクトリにあります。このディレクトリはどこから来たのでしょうか?これはtarファイルに含まれており、ファイルと一緒に抽出されました。

次にギターの曲の抽出をしてみましょう。これを行うには、前のコマンドとほぼ同じコマンドを使用しますが、1つ重要な違いがあります。.bz2拡張子のサフィックスは、bzip2コマンドを使用して圧縮されていることを示しています。-z(gzip)オプションを使用する代わりに、-j(bzip2)オプションを使用してbz2ファイルを解凍します。

tar -xvjf guitar_songs.tar.bz2

ここでも、抽出されたファイルはターミナルにリストされます。念のため、.tar.bz2ファイルに対してtarで使用したコマンドラインオプションを説明します。

  • -x:tarファイルからファイルを抽出します。
  • -v:展開されたファイルのリストを表示します。
  • -j:tarファイルを解凍するためにbzip2を使用します。
  • -f:tarが処理するtarファイルの名前です。

ダウンロードディレクトリ内のファイルをリストすると、ギターの曲という名前の別のディレクトリが作成されていることがわかります。

ファイルを抽出する場所の選択

現在のディレクトリ以外の場所にファイルを抽出したい場合は、-C(指定ディレクトリ)オプションを使用してターゲットディレクトリを指定できます。

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Documents/Songsディレクトリを見ると、Guitar Songsディレクトリが作成されていることがわかります。

ターゲットディレクトリはすでに存在している必要があります。存在しない場合、tarは作成しません。ディレクトリを作成して、tarがそのディレクトリにファイルを抽出するまでを1つのコマンドですべて行う必要がある場合は、次のようにします。

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

-p(親)オプションにより、mkdirは必要な親ディレクトリを作成し、ターゲットディレクトリが作成されるようにします。

ファイルを抽出する前にtarファイルの中を見る

これまで、私たちはただ信じて、ファイルの抽出に踏み切りました。飛び込む前に様子を見たいと思うかもしれません。tarファイルの内容は、-t(リスト)オプションを使用して抽出する前に確認できます。通常は、出力をlessコマンドにパイプするのが便利です。

tar -tf ukulele_songs.tar.gz | less

ファイルのリストには-zオプションを使用する必要がないことに注意してください。.tar.gzファイルからファイルを抽出する場合にのみ、-zオプションを追加する必要があります。同様に、tar.bz2ファイル内のファイルをリストするには、-jオプションは必要ありません。

出力をスクロールすると、tarファイル内のすべてがウクレレの曲というディレクトリに保存されており、そのディレクトリ内にはファイルとその他のディレクトリがあることがわかります。

ウクレレの曲のディレクトリには、Random Songs、Ramones、およびPossiblesというディレクトリが含まれていることがわかります。

tarファイル内のディレクトリからすべてのファイルを抽出するには、次のコマンドを使用します。パスにはスペースが含まれているため、二重引用符で囲まれていることに注意してください。

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

単一のファイルを抽出するには、ファイルのパスと名前を指定します。

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

ワイルドカードを使用してファイルを選択して抽出できます。ワイルドカードでは、*は任意の文字列を表し、?は任意の1文字を表します。ワイルドカードを使用するには、--wildcardsオプションを使用する必要があります。

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

ディレクトリを抽出せずにファイルを抽出する

tarファイルのディレクトリ構造をハードドライブに再作成したくない場合は、--strip-componentsオプションを使用します。--strip-componentsオプションには数値パラメータが必要です。この数値は、無視するディレクトリのレベル数を表します。無視されたディレクトリのファイルは引き続き抽出されますが、ディレクトリ構造はハードドライブに複製されません。

サンプルのtarファイルで--strip-components=1を指定すると、tarファイル内の最上位のウクレレの曲のディレクトリはハードドライブに作成されません。そのディレクトリに抽出されたはずのファイルとディレクトリは、ターゲットディレクトリに抽出されます。

tar -xvzf ukulele_songs.tar.gz --strip-components=1

サンプルのtarファイルには、ディレクトリが2階層しかネストされていません。したがって、--strip-components=2を使用すると、すべてのファイルがターゲットディレクトリに抽出され、他のディレクトリは作成されません。

tar -xvzf ukulele_songs.tar.gz --strip-components=2

Linuxのマニュアルページを見ると、tarは「コマンドラインオプションが最も多いコマンド」というタイトルの候補になることがわかります。ありがたいことに、.tar.gzおよびtar.bz2ファイルから高いレベルのきめ細かい制御でファイルを抽出できるようにするために、これらのオプションのほんの一部を覚えておくだけで済みます。