Zip kullandığımda, komut satırını doldurmadan genel ilerlemeyi nasıl görüntüleyebilirim?


25

Sabit uzunluklu bir ilerleme çubuğu, bir dosya veya bayt sayısı veya daha iyisi, kalan tahmini süreyi gösteren bir zamanlayıcı ideal olacaktır.

zipStandart davranışı, işlenen her dosya için bir satır yazdırmak gibi görünüyor, ancak binlerce dosyayı sıkıştırdığımda bu bilgilerin aşırı yüklenmesini istemiyorum. Ne kadar süreceğini tahmin etmek istiyorum.

Denedim -q( --quietbirlikte) seçeneğini -dg( --display-globaldots) ama sadece sel noktalardan birden hatları ile stdout'a ve hiçbir yararlı bir gösterge verir.

Ben de -qdgds 10mman sayfasında belirtildiği gibi denedim , ancak aynı sonucu aldım.

Sonra denedim -db( --display-bytes) ve -dc( --display-counts) ama genel bir seçenek görünmüyor, bu yüzden her dosya adı için tekrar yazdırıyor.

Son olarak, -qbenzerleriyle birlikte denedim -qdbdc, ama bu hiçbir şey çıkmadı.

Yeterince komik, info-zip sitesinde "arşivleme işlemini tamamlama zamanını gösterir" şeklinde bir -de( --display-est-to-go) seçeneğinden bahseden bir kılavuz sayfası buldum .

Bu tam olarak istediğim gibi geliyor, ancak sorun şu ki sürümümde zipbu özellik yok. Ubuntu 14.04.1 64bit, bash-4.3.30 (1) ve zip-3.00 kullanıyorum. Vikipedi göre, bu zip en son kararlı sürümüdür.

İnfo-zip sourceforge sayfasında henüz yayımlanmamış beta sürümleri var, ancak verilerimi beta sürümüne emanet etmemeyi tercih ediyorum.


Çıktıyı bir dosyaya kaydedin ve ile yüksek düzeyde bilgi sağlamak için kullanın tee. Sıkıştırma işlemine başlamadan önce, toplam dosya sayısını (ile lsveya ile birlikte find -type f) yapın ve sıkıştırırken, önceden işlenmiş olan dosyaların satır sayısını ( grepdoğru satırlara bakmak wc -liçin ve satırlar için) içeren günlük dosyasını okuyun. sayın), bu nedenle üst düzey bilgileriniz "234/76438 dosya işlendi";
Kova Gücü

Toplam dosya boyutunu göz önünde bulundurarak ve daha önce işlenmiş olanların boyutunu kontrol ederek zamanlamayı çalıştırabilirsiniz; ama ... aynı boyuttaki dosyaların bile işlenmesi farklı zaman alıyor, bu yüzden her zaman vahşi bir tahmin olacak ...
Aquarius Power

ZIP dosyaları yaparken stdin kullanıp kullanamayacağınızı bilmiyorum, ama gzip pv /path/to/file | gzip > /path/to/file.gz
tamamsa,

Yanıtlar:


11

zipVerileri standart çıktıya sıkıştırabilir. Dolayısıyla, diğer araçlar ile birleştirebilirsiniz pv:

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

-bepSeçeneklerden birini uygunluk durumunuzdan kaldırın .


Bunun için teşekkürler! Bunu mac'umda yapıyorum (brew install pv, brew coreutils brew ve gdu ile değiştirin).
Jeff

6

7z kullanmakta sorun yaşıyorsanız:

7z a output.zip folder/

Bu size şöyle bir ilerleme çubuğu verecektir:

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

Aşağıdakileri başarıyla kullandım:

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

Ve bu aşağıda açıklanmıştır:

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

özyinelemeli olarak [target_zip] dosyasına sıkıştırın, [folder_to_zip], stderr'i stdout'a yönlendirir. Unutmayın, stderr işlenen her dosya ve dizin için bir satır içerecektir .

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

boru içine pv sıkıştırılmış olduğu gibi dosya adları ile satır. pv satır modunda çalıştırılır (satırlara ve boyuta bağlı olarak sayım ilerleme de beklenecek satır sayısındadır - bkz. PV kılavuz sayfası -l seçeneği ).

Beklenecek toplam satır büyüklüğü, [folder_to_zip] 'in tekrar tekrar listelenmesi (ls) ve' - 'veya' d 'ile başlayan satırların sayılmasıyla toplanır, yani tüm dosyalar ve dizinler (dizinleri' / 'ile başlayanlar listelenir) .

Yukarıdakiler, tüm dosyalar ve dizinler işlendiğinde% 100'e ulaşıldığından doğru tamamlanma yüzdesini sağlar.

Pedroapero'nun cevabındaki sorun, ilerlemenin, işlenecek (sıkıştırılmış) bayt sayısı ile işlenecek (sıkıştırılmamış) toplam bayt sayısı üzerinde hesaplanmasıdır. Sonuç olarak, işlem yaklaşık% 30 oranında tamamlanır (sıkıştırma oranına bağlı olarak).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.