zipを使用すると、コマンドラインに負担をかけずに全体の進行状況をどのように表示できますか?

zipを使用すると、コマンドラインに負担をかけずに全体の進行状況をどのように表示できますか?

固定長プログレスバー、ファイル、バイト数、または残りの予想時間を示すタイマーが理想的です。

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

-q()オプションと一緒に()オプションを試してみましたが、--quiet標準出力は複数行のドットでいっぱいであり、役に立つ指示はありません。-dg--display-globaldots

マニュアルページに記載されているように試しましたが、-qdgds 10m同じ結果が得られました。

-db次に、(--display-bytes)と-dc()を試しましたが--display-countsグローバルオプションがないように見え、各ファイル名に対して再印刷します。

ついに私は-qそれをlikeで使ってみましたが、-qdbdc何も出力しませんでした。

興味深いことに、私はinfo-zipウェブサイトで「アーカイブ作業を完了するのにかかる時間を表示する」という-deオプションを参照するマニュアルページを見つけました。--display-est-to-go

これは私が望むように聞こえますが、問題は私のバージョンにzipその機能がないことです。私はUbuntu 14.04.1 64ビット、bash-4.3.30(1)、zip-3.00を使用しています。 Wikipediaによると、これはzipの最新の安定版です。

info-zip sourceforgeページにまだリリースされていないベータ版がありますが、私のデータをベータ版に任せたくありません。

答え1

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

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

-bepあなたの便宜に応じて、いずれかのオプションを削除してください。

答え3

私は次のように成功しました。

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 |

zipは[target_zip]ファイルとして繰り返され、[folder_to_zip]はstderrをstdoutにリダイレクトします。 stderr には以下が含まれます。ファイルとディレクトリごとに1行処理。

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

pvファイル名がzipから出力されたら、ファイル名を含む行にパイプします。pv行モードでの操作(進行率は行数に基づいて計算され、サイズも予想行数です。を参照)PV マニュアルページ -l オプション)。

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

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

pedroaperoの答えの問題は、処理された(圧縮された)バイト数を処理される(圧縮されていない)合計バイト数で割った値に基づいて進行状況が計算されることです。これにより、圧縮率によって約30%程度のプロセスが完了します。

答え4

コマンドにフラグを追加できます-qq。これは私にとって効果的です。
例:

zip -r -qq out_chairs.zip out_chairs/

関連情報