tarコマンドまとめ

## tarコマンドとは

「tar」は、複数のファイルを1つにまとめたアーカイブファイルを作成／展開するコマンドである。また、作成・展開する時に圧縮・解凍を行うこともできる。

オプションが多いため覚えるのが大変だが、単語の意味を覚えれば記憶に残りやすい。

## アーカイブとは
アーカイブとは複数のファイルを一つにまとめることである。

## オプション
・操作オプション(`-c`と`-x`は対で覚える)

|  オプション  |  英語(長いオプション)| 意味|
| ---- | ---- | ---- |
|  -c  |  --create|  アーカイブを作成する|
|  -x  |  --extract |  アーカイブを展開する  |
|  -t |  --list  |  一覧表示する  |

・共通オプション（圧縮形式）

|  オプション  |  英語(長いオプション)| 意味|
| ---- | ---- | ---- |
|  -z  | --gzip | gzip形式 |
|  -j  | --bzip2|  bzip2形式 |
|  -J  | --xz| xz形式 |

・共通オプション(その他)

|  オプション  |  英語(長いオプション)| 意味|
| ---- | ---- | ---- |
|  -v  | --verbose | 処理したファイルを詳しく出力する |
|  -f  | --file | アーカイブファイル名を指定する |

##事前準備
アーカイブするためのファイルを作成する

```bash
$ mkdir filearchive
$ cd filearchive
$ touch test_{1..5}.txt
$ ls test*

test_1.txt  test_2.txt  test_3.txt  test_4.txt  test_5.txt
```

## 複数ファイルをアーカイブする

```
$ tar cvf ファイル名 アーカイブ対象ディレクトリ
```
```bash
//拡張子は.tarにすることが慣例
$ tar cvf filearchive.tar filearchive 

filearchive/
filearchive/test_1.txt
filearchive/test_2.txt
filearchive/test_3.txt
filearchive/test_4.txt
filearchive/test_5.txt

$ ll //作成されたかの確認
drwxr-xr-x 2 root root    96 11月 13 15:55 filearchive
-rw-r--r-- 1 root root 20480 11月 13 16:01 filearchive.tar
```

###アーカイブファイルを展開する

```bash
$ tar xvf tarファイル名
```

```bash
//解凍されたか確認のために元のディレクトリを削除
$ rm -rf filearchive/
$ tar xvf filearchive.tar

filearchive/
filearchive/test_1.txt
filearchive/test_2.txt
filearchive/test_3.txt
filearchive/test_4.txt
filearchive/test_5.txt

//展開されたかの確認
$ ll
drwxr-xr-x 2 root root    96 11月 13 15:55 filearchive

```
## 圧縮してアーカイブ、解凍して展開する
`tarコマンド`は複数のファイルをアーカイブするものであり、圧縮はされているわけではない。しかし、圧縮形のオプションを使うことでアーカイブと圧縮を同時（連続して）に行うことが可能である。


###アーカイブし、gzipで圧縮する（-z）
```bash
$ tar cvzf ファイル名 圧縮対象ディレクトリ
```

```bash
//拡張子は.tar.gzにすることが慣例
$ tar cvzf filearchive.tar.gz filearchive/

filearchive/
filearchive/test_1.txt
filearchive/test_2.txt
filearchive/test_3.txt
filearchive/test_4.txt
filearchive/test_5.txt

$ ll //作成、圧縮されたかの確認

drwxr-xr-x 2 root root    96 11月 13 15:55 filearchive
-rw-r--r-- 1 root root   270 11月 13 16:24 filearchive.tar.gz
```

###gzipを解凍して展開する（-z）

```bash
$ tar xvzf ファイル名
```

```bash
//解凍されたか確認のために元のディレクトリを削除
$ rm -rf filearchive/
$ tar xvzf filearchive.tar.gz

filearchive/
filearchive/test_1.txt
filearchive/test_2.txt
filearchive/test_3.txt
filearchive/test_4.txt
filearchive/test_5.txt

$ ll //解凍、展開されたかの確認
drwxr-xr-x 2 root root    96 11月 13 15:55 filearchive
-rw-r--r-- 1 root root   270 11月 13 16:24 filearchive.tar.gz
```
###bzip2(-j)、xz(J)も同様
####アーカイブして圧縮

```bash
//bzip2
$ tar cvjf ファイル名 圧縮対象ディレクトリ
$ tar cvjf filearchive.tar.bz2 filearchive/

//xz
$ tar cvJf ファイル名 圧縮対象ディレクトリ
$ tar cvJf filearchive.tar.xz filearchive/
```

####解凍して展開
```bash
//bzip2
$ tar xvjf ファイル名
$ tar xvjf filearchive.tar.bz2

//xz
$ tar xvJf ファイル名 圧縮対象ディレクトリ
$ tar xvJf filearchive.tar.xz
```

##展開せずに中身を確認
`-t`オプションで展開せずに中身を確認することが出来る。

```bash
//gzip
tar tvzf filearchive.tar.gz

//bzip2
tar tvjf filearchive.tar.bz2

//xz
tar tvJf filearchive.tar.xz
```

##圧縮形式の確認

たとえ拡張子が`tar.gz`となっていても本当に`gzip`形式で圧縮しているか分からないため、圧縮形式を確認するコマンドを知っていた方が良いかもしれない。


```bash
$ file ファイル名

$  file filearchive.tar.gz
filearchive.tar.gz: gzip compressed data, from Unix, last modified: Sat Nov 13 16:46:36 2021

$ file filearchive.tar.bz2
filearchive.tar.bz2: bzip2 compressed data, block size = 900k

$ file filearchive.tar.xz
filearchive.tar.xz: XZ compressed data
```



## 参考記事
https://atmarkit.itmedia.co.jp/ait/articles/1608/15/news015.html
http://hydrocul.github.io/wiki/commands/tar.html