Kiedy używam zip, jak mogę wyświetlić ogólny postęp bez zalewania linii poleceń?


25

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.

zipStandardowe 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 10mjak 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 -qpolubieniem -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 zipnie 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.


Zaloguj dane wyjściowe do pliku i użyj go do dostarczenia informacji wysokiego poziomu za pomocą tee. Przed rozpoczęciem kompresowania zrób całkowitą liczbę plików (za pomocą lslub find -type f), a podczas kompresowania przeczytaj plik dziennika zawierający liczbę linii przetworzonych plików, które już posiada (z grepodpowiednimi liniami do przeglądania i wc -lliniami count), więc informacje wysokiego poziomu pokażą coś w stylu „przetworzono pliki 234/76438”;
Wodnik Moc

możesz ustalić czas, biorąc pod uwagę całkowity rozmiar plików i sprawdzając rozmiar tych, które zostały już przetworzone; ale ... nawet pliki o tym samym rozmiarze są przetwarzane inaczej, więc zawsze będzie to zgadywanie ...
Aquarius Power

Nie wiem, czy możesz użyć standardowego wejścia do tworzenia plików ZIP, ale jeśli gzip jest w porządku, możesz zrobić coś takiegopv /path/to/file | gzip > /path/to/file.gz
DopeGhoti

Odpowiedzi:


11

zippotrafi kompresować dane do standardowego wyjścia. Dlatego możesz połączyć to z innymi narzędziami, takimi jak pv:

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

Usuń jedną z -bepopcji dla wygody.


Dzięki za to! Robię to na moim komputerze Mac (brew install pv, brew install coreutils i zamieniam du na gdu).
Jeff

6

Jeśli nie masz nic przeciwko użyciu 7z:

7z a output.zip folder/

To da ci pasek postępu taki jak ten:

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

Z powodzeniem wykorzystałem następujące elementy:

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

I to wyjaśniono poniżej:

zip -r [target_zip] [folder_do_zip] 2> i 1 |

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 .

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

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.