Jest ładne narzędzie o nazwie pv
# On Ubuntu/Debian system
$ sudo apt-get install pv
# On Redhat/CentOS
$ sudo yum install pv
wtedy np. możesz użyć tego w ten sposób
$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname
Sprawdź UPDATE 2 dla mojej najnowszej wersji
ps: sprawdź ten blog http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html
AKTUALIZACJA: wydaje się, że powyższy link jest uszkodzony, ale znalazłem ten sam artykuł tutaj http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html
AKTUALIZACJA 2: Jeszcze lepsze rozwiązanie z PEŁNYM paskiem postępu. Aby to zrobić, musisz użyć 2 wbudowanych pv
opcji. Jednym z nich jest --progress
, aby wskazać pasek postępu a drugi jest --size
, aby powiedzieć pv
, jak duży plik jest całkowita.
pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES
.. problem dotyczy .gz
oryginalnego rozmiaru pliku. Potrzebujesz w jakiś sposób uzyskać informacje o oryginalnym rozmiarze rozpakowanego pliku bez samodzielnego rozpakowywania, w przeciwnym razie stracisz cenny czas na dwukrotne rozpakowanie tego pliku (za pierwszym razem pv
i za drugim razem zcat
). Ale na szczęście masz gzip -l
opcję, która zawiera nieskompresowane informacje o naszym pliku spakowanym gzipem. Niestety masz go w formacie tabeli, więc musisz go rozpakować, zanim będzie można go użyć. Wszystko razem można zobaczyć poniżej:
gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'
Uff ... więc ostatnią rzeczą, którą musisz zrobić, to po prostu połączyć wszystko razem.
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname
Aby było jeszcze przyjemniej, możesz dodać progres NAME w ten sposób
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass dbname
Ostateczny wynik:
Importing.. : [===========================================>] 100%
AKTUALIZACJA 3: W celu szybkiego użycia utwórz niestandardową funkcję.
mysql_import() {
zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass $1
}
stosowanie:
mysql_import dbname /path/to/our/database.sql.gz
Jeśli nie wiesz, gdzie go umieścić, przeczytaj tę odpowiedź:
/unix//a/106606/20056
Możesz dodawać funkcje między aliasami. Możesz więc użyć np ~/.bash_aliases
. Pliku.
pv
,cpipe
) działają w tym scenariuszu?