1. ishikawa@github

    No comment

    ishikawa@github
Changes in body
Source | HTML | Preview
@@ -1,42 +1,44 @@
+_[個人ブログにも転載しています](https://metareal.blog/post/2019/04/14/how-to-show-progress-bar-while-unzipping-tons-of-files/)_
+
公開データセットとか、やたらとファイル数が多い zip ファイルをノートブックで `unzip` すると、出力が多すぎて UI のパフォーマンスが急激に劣化する。
```bash
!unzip /home/data/large_dataset.zip -d /home/data/
Archive: /home/data/large_dataset.zip
inflating: /home/data/large_dataset/1/1900_753325_0060.png
inflating: /home/data/large_dataset/1/1900_754949_0023.png
inflating: /home/data/large_dataset/1/1900_758495_0075.png
inflating: /home/data/large_dataset/1/1900_761460_0029.png
inflating: /home/data/large_dataset/1/1900_766994_0030.png
inflating: /home/data/large_dataset/1/1900_776319_0015.png
...
(More 80K lines)
```
かといって、 `/dev/null` にリダイレクトしたり、`-q` オプションを指定して出力そのものをなくしてしまうと、本当に解凍処理が進んでいるのか分からなくて不安になる。
```bash
!unzip /home/data/large_dataset.zip -d /home/data/ > /dev/null
!unzip -q /home/data/large_dataset.zip -d /home/data/
```
## それ、`pv` コマンドで出来るよ
ググってみると pv コマンドで出来る、とのことだったが、全体のファイル数を指定してちゃんとプログレス・バーが機能するようにしている例が見当たらなかったので、この記事を書いた。
```
n_files = !unzip -l /home/data/large_dataset.zip | grep .png | wc -l
!unzip -o /home/data/large_dataset.zip -d /home/data/ | pv -l -s {n_files[0]} > /dev/null
```
1. まず、`unzip -l` で全体のファイル数を取得する。`unzip -l` が報告する内容にはディレクトリも含まれているので、`grep` でフィルタが必要だ。残念ながら
2. 次に再度 `unzip` コマンドを実行して、今度は実際に解凍処理を実行する。処理したファイル名が出力されるので、これを `pv` コマンドにつなぎ、`-s (size)` オプションでファイル数を指定する
これで、こんな感じのプログレス・バーが表示されるようになる。
```
80.1k 0:00:09 [8.54k/s] [====================================>] 100%
```