Idealny byłby pasek postępu o stałej długości, liczba plików lub bajtów, lub jeszcze lepiej licznik czasu pokazujący szacowany pozostały czas.
zip
Standardowe zachowanie wydaje się polegać na drukowaniu wiersza dla każdego przetwarzanego pliku, ale nie chcę, aby te informacje były przeciążone, gdy skompresuję tysiące plików. Chcę oszacować, ile to zajmie.
Próbowałem opcji -q
( --quiet
) w połączeniu z -dg
( --display-globaldots
), ale to po prostu zalewa standardowe wyjście z wieloma liniami kropek i nie daje użytecznego wskazania.
Próbowałem też, -qdgds 10m
jak wspomniano na stronie podręcznika użytkownika, ale uzyskałem ten sam wynik.
Następnie spróbowałem -db
( --display-bytes
) i -dc
( --display-counts
), ale wydaje się, że nie ma opcji globalnej, więc ponownie drukuje ją dla każdej nazwy pliku.
Na koniec spróbowałem tego razem z -q
polubieniem -qdbdc
, ale to nic nie daje .
Co zabawne, znalazłem stronę podręcznika man w witrynie info-zip, która wspomina o opcji -de
( --display-est-to-go
), która powinna „Wyświetlać przybliżony czas zakończenia operacji archiwizacji”.
Brzmi dokładnie tak, jak chcę, ale problem polega na tym, że moja wersja zip
nie ma tej funkcji. Używam Ubuntu 14.04.1 64bit, bash-4.3.30 (1) i zip-3.00. Według Wikipedii jest to najnowsza stabilna wersja zip.
Na stronie info-zip sourceforge znajdują się niepublikowane wersje beta, ale wolałbym nie powierzać moich danych wersji beta.
źródło
tee
. Przed rozpoczęciem kompresowania zrób całkowitą liczbę plików (za pomocąls
lubfind -type f
), a podczas kompresowania przeczytaj plik dziennika zawierający liczbę linii przetworzonych plików, które już posiada (zgrep
odpowiednimi liniami do przeglądania iwc -l
liniami count), więc informacje wysokiego poziomu pokażą coś w stylu „przetworzono pliki 234/76438”;pv /path/to/file | gzip > /path/to/file.gz
Odpowiedzi:
zip
potrafi kompresować dane do standardowego wyjścia. Dlatego możesz połączyć to z innymi narzędziami, takimi jakpv
:Usuń jedną z
-bep
opcji dla wygody.źródło
Jeśli nie masz nic przeciwko użyciu 7z:
To da ci pasek postępu taki jak ten:
źródło
Z powodzeniem wykorzystałem następujące elementy:
I to wyjaśniono poniżej:
zip rekurencyjnie do pliku [target_zip] plik [folder_to_zip] przekierowuje stderr na standardowe wyjście. Zauważ, że stderr będzie zawierał jedną linię dla każdego przetwarzanego pliku i katalogu .
przeciągnij do pv linie z nazwami plików, gdy są one wyprowadzane z zip. pv działa w trybie linii (zliczanie postępu na podstawie linii i rozmiaru jest również liczbą linii, których można się spodziewać - patrz PV man strona -l opcja ).
Całkowity rozmiar linii, których można się spodziewać, jest zbierany przez rekursywne wyświetlanie (ls) [folder_do_zip] i zliczanie linii zaczynających się od „-” lub „d”, tj. Wszystkich plików i katalogów (pamiętaj, że katalogi zaczynają się od „/”) .
Powyższe zapewnia dokładny procent ukończenia, ponieważ 100% zostanie osiągnięte, gdy wszystkie pliki i katalogi zostaną przetworzone.
Problem z odpowiedzią pedroapero polega na tym, że postęp jest obliczany na podstawie liczby przetworzonych (skompresowanych) bajtów względem całkowitej liczby bajtów do przetworzenia (nieskompresowanych). W rezultacie proces zakończy się na poziomie około 30% (w zależności od stopnia kompresji).
źródło