7zipで分割圧縮されたファイルを元に戻す(LINUX)

巨大なファイルが7zipで圧縮かつ分割されて送られてきた。
もどに戻すのに時間がかかったので、7zipをLinuxで取り扱う方法をメモしておく。

7zipインストール
---------------

```bash:command
sudo yum install -y p7zip
```

圧縮方法も学んでおこう！
=================

1024MBのダミーファイルの作成
-------------------

```bash:command
FILENAME="my_dummy_file"
dd if=/dev/zero of=${FILENAME} bs=1024M count=1
```

圧縮
---------------

### 無圧縮: `-mx=0` オプション

```bash:command
OUTPUT="case1.7z"
7za a ${OUTPUT} ${FILENAME} -mx=0 -v256m
```

```bash:response
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,24 CPUs Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz (50654),ASM,AES-NI)

Scanning the drive:
1 file, 1073741824 bytes (1024 MiB)

Creating archive: case1.7z

Items to compress: 1

                    
Files read from disk: 1
Archive size: 1073741954 bytes (1025 MiB)
Everything is Ok
```

```bash:command
ls -l ${OUTPUT}*
```

```bash:response
-rw-r--r-- 1 xdu-049001 268435456 Jul 10 14:55 case1.7z.001
-rw-r--r-- 1 xdu-049001 268435456 Jul 10 14:55 case1.7z.002
-rw-r--r-- 1 xdu-049001 268435456 Jul 10 14:55 case1.7z.003
-rw-r--r-- 1 xdu-049001 268435456 Jul 10 14:55 case1.7z.004
-rw-r--r-- 1 xdu-049001       130 Jul 10 14:55 case1.7z.005
```

### 最大圧縮: `-mx` オプション

```bash:command
OUTPUT="case2.7z"
7za a ${OUTPUT} ${FILENAME} -mx -v256m
```

```bash:response
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,24 CPUs Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz (50654),ASM,AES-NI)

Scanning the drive:
1 file, 1073741824 bytes (1024 MiB)

Creating archive: case2.7z

Items to compress: 1

                      
Files read from disk: 1
Archive size: 156907 bytes (154 KiB)
Everything is Ok
```

```bash:command
$ ls -l ${OUTPUT}*
```

```bash:response
-rw-r--r-- 1 xdu-049001 156907 Jul 10 15:02 case2.7z.001
```

7zipで分割圧縮されたファイルを元に戻す
=================

解凍
----------------------

### はじめに作ったダミーファイルの名前変更

いったん先程つくったダミーファイルの名前を変更する

```bash:command
FILENAME="my_dummy_file"
mv ${FILENAME} _bak_${FILENAME}
```

### ファイルの状況確認

先程の無圧縮のファイルで試してみる。

```bash:command
FILENAME_7ZIP="case1.7z"
file ${FILENAME_7ZIP}.*
```

```bash:response
case1.7z.001: 7-zip archive data, version 0.4
case1.7z.002: data
case1.7z.003: data
case1.7z.004: data
case1.7z.005: data
```

このケースでは `7-zip archive data, version 0.4` と表示されている `case1.7z.001` に対して以下のコマンドを実行する

```bash:command
7za x ${FILENAME_7ZIP}.001
```

```bash:response
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,24 CPUs Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz (50654),ASM,AES-NI)

Scanning the drive for archives:
1 file, 268435456 bytes (256 MiB)

Extracting archive: case1.7z.001
--         
Path = case1.7z.001
Type = Split
Physical Size = 268435456
Volumes = 5
Total Physical Size = 1073741954
----
Path = case1.7z
Size = 1073741954
--
Path = case1.7z
Type = 7z
Physical Size = 1073741954
Headers Size = 130
Method = Copy
Solid = -
Blocks = 1

Everything is Ok    

Size:       1073741824
Compressed: 1073741954
```

ちゃんと解凍されているか確認

```bash:command
ls -l ${FILENAME}
-rw-r--r-- 1 xdu-049001 1073741824 Jul 10 14:32 my_dummy_file
```



参考
-----

- https://kakurasan.blogspot.com/2015/09/howto-split-concatenate-on-linux.html#h-howto-split-concatenate-on-linux-2