zipを使用する場合、コマンドラインをあふれさせることなく全体的な進行状況を表示するにはどうすればよいですか?


25

固定長のプログレスバー、ファイルまたはバイトカウント、さらに良いことに、残りの推定時間を示すタイマーが理想的です。

zipの標準的な動作は、処理されたすべてのファイルの行を印刷するようですが、何千ものファイルを圧縮するときにその情報が過負荷になるのは望ましくありません。どれくらいの時間がかかるかを推測したい。

-q--quiet)オプションと-dg--display-globaldots)を組み合わせて試しましたが、stdoutに複数行のドットがあふれてしまい、有用な表示がありません。

私も-qdgds 10mマニュアルページで述べたように試しましたが、同じ結果を得ました。

次に-db--display-bytes)と-dc--display-counts)を試しましたが、グローバルオプションはないようです。そのため、すべてのファイル名に対して再度出力します。

最後に、-qlike とともに試してみました-qdbdcが、何も出力されません。

Funnily十分に、私が言及している情報ジップサイト上のmanページを発見した-de--display-est-to-goはずです)オプション「アーカイブ操作を完了する時間の推定値を表示します。」

それは私が望むものとまったく同じように聞こえますが、問題は私のバージョンzipがその機能を持っていないことです。Ubuntu 14.04.1 64ビット、bash-4.3.30(1)およびzip-3.00を使用しています。ウィキペディアによると、これはzipの最新の安定版リリースです。

info-zip sourceforgeページには未リリースのベータ版がありますが、データをベータ版に委ねたくありません。


出力をファイルに記録し、それを使用して高レベルの情報を提供しteeます。ジップを開始する前に、ファイルの合計数(と作るlsfind -type f)を、それがビュンされている間、それはすでに(と持って処理されたファイルの行数のログ・ファイルを読み込むgrep見て右ラインについて、およびwc -lラインのカウント)、したがって、高レベルの情報には「234/76438個のファイルが処理されました」のようなものが表示されます。
アクエリアスパワー

合計ファイルサイズを考慮し、すでに処理されているファイルのサイズを確認することで、タイミングを調整できます。しかし...同じサイズのファイルであっても、処理に異なる時間がかかるので、それは常にワイルドな推測になります...
アクエリアスパワー

ZIPファイルを作成するときにstdinを使用できるかどうかはわかりませんが、gzipで問題なければ、次のようなことができますpv /path/to/file | gzip > /path/to/file.gz
-DopeGhoti

回答:


11

zipデータを標準出力に圧縮できます。したがって、次のような他のツールと組み合わせることができますpv

zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]

-bep便宜上、オプションのいずれかを削除します。


これをありがとう!私は自分のMacでこれを行います(pvをインストールし、coreutilsをインストールし、duをgduに置き換えます)。
ジェフ

6

7zを使用しても問題ない場合:

7z a output.zip folder/

これにより、次のような進行状況バーが表示されます。

Open archive: test.zip
--
Path = test.zip
Type = zip
Physical Size = 232039663

Scanning the drive:
3 folders, 2401 files, 238122225 bytes (228 MiB)

Updating archive: test.zip

Items to compress: 2404

 16% 279 U folder/file.txt  

2

私は次を正常に使用しました:

zip -r [target_zip] [folder_to_zip] 2>&1 | 
pv -lep -s $(ls -Rl1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null

そして、これについて以下で説明します。

zip -r [target_zip] [folder_to_zip] 2>&1 |

[target_zip]ファイルに再帰的にzipして、[folder_to_zip]をstderrをstdoutにリダイレクトします。stderrには、ファイルとディレクトリごとに1行が含まれることに注意してください。処理される。

pv -lep -s $(ls -Ral1 [folder_to_zip] | egrep -c '^ [-/]')> / dev / null

zipから出力されているファイル名を含む行をpvにパイプします。pvは行モードで動作します(行とサイズに基づいて進行状況をカウントすることも、予想される行数です-参照 -PVのmanページの-lオプションを参照してください)。

予想される行の合計サイズは、[folder_to_zip]を再帰的にリスト(ls)し、 '-'または 'd'で始まる行つまりすべてのファイルとディレクトリ(ディレクトリは '/'で始まることを思い出してください)を数えることで収集されます。

上記は、すべてのファイルとディレクトリが処理されたときに100%に達するため、正確な完了率を提供します。

pedroaperoの答えの問題は、進行状況が、処理する合計バイト数(非圧縮)に対する処理(圧縮)バイト数で計算されることです。その結果、プロセスは約30%で完了します(圧縮率によって異なります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.