Linuxでtarコマンドを使用してファイルを圧縮および抽出する方法

  • Linuxのtarコマンドは、TARアーカイブファイルを作成および抽出するために使用されます。
  • ファイルまたはフォルダを圧縮するには、ターミナルで「tar -czvf (アーカイブ名).tar.gz (ファイルへのパス)」を実行します。アーカイブを現在のフォルダに抽出するには、「tar -xzvf (アーカイブファイル)」というコマンドを実行します。
  • ファイルまたはディレクトリのリストを提供することで、一度に複数のディレクトリまたはファイルを圧縮でき、--excludeスイッチを使用して特定のファイルまたはディレクトリを除外できます。

Linuxのtarコマンドは、しばしば「tarball」とも呼ばれる.tar.gzまたは.tgzアーカイブファイルを作成するために使用されます。このコマンドには多数のオプションがありますが、tarでアーカイブをすばやく作成するには、いくつかの文字を覚えておくだけで済みます。tarコマンドは、結果のアーカイブを抽出することもできます。

Linuxディストリビューションに含まれるGNU tarコマンドには、圧縮が統合されています。これにより、1つのコマンドで.tarアーカイブを作成し、gzipまたはbzip2圧縮で圧縮することができます。それが、結果のファイルが.tar.gzファイルまたは.tar.bz2ファイルである理由です。

ディレクトリ全体または単一のファイルを圧縮する

Linuxでディレクトリ全体または単一のファイルを圧縮するには、次のコマンドを使用します。指定したディレクトリ内の他のすべてのディレクトリも圧縮されます。つまり、再帰的に動作します。

tar -czvf name-of-archive.tar.gz /path/to/directory-or-file

これらのスイッチが実際に意味するものは次のとおりです。

  • -c:Create an archive(アーカイブを作成します)。
  • -z: Compress the archive with gzip(アーカイブをgzipで圧縮します)。
  • -v: Display progress in the terminal while creating the archive, also known as "verbose" mode(アーカイブを作成中にターミナルで進行状況を表示します。これは「verbose」モードとも呼ばれます)。これらのコマンドではvは常にオプションですが、便利です。
  • -f: Allows you to specify thefilename of the archive(アーカイブのfilenameを指定できます)。

現在のディレクトリに「stuff」という名前のディレクトリがあり、それをarchive.tar.gzという名前のファイルに保存したいとします。次のコマンドを実行します。

tar -czvf archive.tar.gz stuff

または、現在のシステムに/usr/local/somethingにディレクトリがあり、それをarchive.tar.gzという名前のファイルに圧縮したいとします。次のコマンドを実行します。

tar -czvf archive.tar.gz /usr/local/something

複数のディレクトリまたはファイルを一度に圧縮する

tarは単一のディレクトリを圧縮するために頻繁に使用されますが、複数のディレクトリ、複数の個々のファイル、またはその両方を圧縮するためにも使用できます。単一のファイルではなく、ファイルまたはディレクトリのリストを提供するだけです。たとえば、/home/ubuntu/Downloadsディレクトリ、/usr/local/stuffディレクトリ、および/home/ubuntu/Documents/notes.txtファイルを圧縮したいとします。次のコマンドを実行するだけです。

tar -czvf archive.tar.gz /home/ubuntu/Downloads /usr/local/stuff /home/ubuntu/Documents/notes.txt

バックアップするディレクトリまたはファイルを好きなだけリストしてください。

ディレクトリとファイルを除外する

場合によっては、ディレクトリ全体を圧縮したいが、特定のファイルやディレクトリは含めない場合があります。除外する各ディレクトリまたはファイルに対して--excludeスイッチを追加することで、それを行うことができます。

たとえば、/home/ubuntuを圧縮したいが、/home/ubuntu/Downloadsおよび/home/ubuntu/.cacheディレクトリは圧縮したくないとします。その方法を次に示します。

tar -czvf archive.tar.gz /home/ubuntu --exclude=/home/ubuntu/Downloads --exclude=/home/ubuntu/.cache

--excludeスイッチは非常に強力です。ディレクトリとファイルの名前は取得しませんが、実際にはパターンを受け入れます。それを使ってできることは他にもたくさんあります。たとえば、次のコマンドを使用して、ディレクトリ全体をアーカイブし、すべての.mp4ファイルを除外することができます。

tar -czvf archive.tar.gz /home/ubuntu --exclude=*.mp4

代わりにbzip2圧縮を使用する

gzip圧縮は.tar.gzまたは.tgzファイルを作成するために最も頻繁に使用されますが、tarはbzip2圧縮もサポートしています。これにより、bzip2で圧縮されたファイルを作成できます。これは、多くの場合.tar.bz2、.tar.bz、または.tbzファイルという名前です。これを行うには、ここにあるコマンドのgzipの-zをbzip2の-jに置き換えるだけです。

gzipは高速ですが、一般的には少し圧縮率が低いため、やや大きなファイルになります。bzip2は低速ですが、圧縮率が少し高いため、やや小さなファイルになります。gzipはより一般的であり、一部の簡素化されたLinuxシステムにはデフォルトでgzipサポートが含まれていますが、bzip2サポートは含まれていません。しかし、一般的にはgzipとbzip2は実質的に同じものであり、どちらも同様に機能します。

たとえば、stuffディレクトリを圧縮するために提供した最初の例ではなく、次のコマンドを実行します。

tar -cjvf archive.tar.bz2 stuff

tarファイルの抽出

アーカイブを作成したら、tarコマンドで抽出できます。次のコマンドは、archive.tar.gzの内容を現在のディレクトリに抽出します。

tar -xzvf archive.tar.gz

これは、上記で使用したアーカイブ作成コマンドと同じですが、-cスイッチが-xスイッチに置き換えられています。これは、アーカイブを作成するのではなく、extract(抽出)する必要があることを指定します。

アーカイブの内容を特定のディレクトリに抽出することができます。これを行うには、コマンドの最後に-Cスイッチを追加します。たとえば、次のコマンドは、archive.tar.gzファイルの内容を/tmpディレクトリに抽出します。

tar -xzvf archive.tar.gz -C /tmp

ファイルがbzip2で圧縮されたファイルの場合は、上記のコマンドの「z」を「j」に置き換えてください。

これは、tarコマンドの最も簡単な使い方です。このコマンドには多数の追加オプションが含まれているため、すべてをここにリストすることは不可能です。詳細については、シェルでinfo tarコマンドを実行して、tarコマンドの詳細情報ページを表示します。終了したら、qキーを押して情報ページを終了します。tarのマニュアルをオンラインで読むこともできます。

グラフィカルLinuxデスクトップを使用している場合は、デスクトップに含まれるファイル圧縮ユーティリティまたはファイルマネージャーを使用して、.tarファイルを作成または抽出することもできます。Windowsでは、無料の7-Zipユーティリティで.tarアーカイブを抽出および作成できます。