Ještě do nedávna bych použil takovýto oneliner na gzipnutí hromady souborů v adresáři. Pokud to bylo pár souborů nebo se jednalo o menší soubory, tak proč ne, že?
for file in $(ls ./ ); do gzip -v $file ; done
Problém přichází s mnohasetgigovými soubory.
Nainstalujeme pigz (debian/ubuntu):
apt-get update -y && apt-get install pigz -y
Balíme multivláknově
Následující příkaz využije 16 vláken CPU:
for file in $(ls ./ ); do tar cf - $file | pigz -9 -p 16 > $file.tar.gz ; done
Pojďme z toho ale udělat univerzální oneliner pomocí nproc:
for file in $(ls ./ ); do tar cf - $file | pigz -9 -p nproc > $file.tar.gz ; done
#totéž za použití proměnné:
cpu=$(nproc) ; for file in $(ls ./ ); do tar cf - $file | pigz -9 -p $cpu > $file.tar.gz ; done
A musím uznat, že to balí velmi slušně. Z 61 GB image mi to udělalo 13 GB image.