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