Saya memiliki banyak file gzip yang harus saya konversi menjadi bzip2 setiap saat. Saat ini, saya menggunakan skrip shell yang hanya 'gunzip setiap file dan kemudian' bzip2 itu. Meskipun ini berhasil, dibutuhkan banyak waktu untuk menyelesaikannya.
Apakah mungkin membuat proses ini lebih efisien? Saya siap untuk menyelam dan melihat kode sumber gunzip dan bzip2 jika perlu, tetapi saya hanya ingin memastikan hasilnya. Adakah harapan untuk meningkatkan efisiensi proses?
sumber
pbzip2
menyebutkannya. Jika tautan tidak dimuat untuk orang lain, inilah halaman proyek dan halaman manual .Daripada gunzip di satu langkah dan bzip2 di yang lain, saya bertanya-tanya apakah mungkin akan lebih efisien untuk menggunakan pipa. Sesuatu seperti
gunzip --to-stdout foo.gz | bzip2 > foo.bz2
Saya sedang berpikir dengan dua CPU atau lebih, ini pasti akan lebih cepat. Tetapi mungkin bahkan dengan hanya satu inti. Namun saya mengakui tidak pernah mencoba ini.
sumber
bzip2
dangzip
tidak bekerja secara paralel secara internal, dengan menggunakan pipa Anda dapat membuatnya bekerja secara paralel, karena sebuah pipa secara implisit memulai dua proses, yang akan berjalan secara paralel. Jadi setidaknya dekompresi dan kompresi akan berjalan secara paralel.bzip2
penggunaan CPU mengerdilkangunzip
satu, jadi dalam praktiknya paralelisme yang Anda dapatkan di sini sangat minim. Tidak harus melakukan IO disk masih bagus!GNU parallel ( http://www.gnu.org/software/parallel ) mungkin menjadi opsi jika Anda memiliki banyak core (atau bahkan beberapa mesin):
Baca halaman tutorial / manual untuk detail dan opsi.
sumber
Apa yang Anda lakukan saat ini adalah taruhan terbaik Anda. Tidak ada alat konversi yang tersedia, dan mencoba melakukan bzip2 file yang sudah di-gzip bukanlah pilihan, karena seringkali memiliki efek yang tidak diinginkan. Karena algoritmenya berbeda, pengubahan akan melibatkan pengambilan data asli apa pun. Kecuali tentu saja gzipping adalah langkah dalam proses bzip2, yang sayangnya tidak.
sumber
gzip
menggunakan Leimpel-Ziv 77, sementarabzip2
menggunakan Burrows-Wheeler. Algoritma yang berbeda, saya khawatir.Kadang-kadang, saya perlu melakukan hal yang sama dengan file log. Saya mulai dengan file * .gz terkecil terlebih dahulu (
ls -rS
), gunzip dan kemudian dan bzip2 secara individual. Saya tidak tahu apakah mungkin untuk mengarahkan output gunzip langsung ke input bzip2. Perintah bzip2 jauh lebih lambat dalam mengompresi daripada gunzip berada pada dekompresi sehingga ia dapat menghabiskan memori dan ruang swap pada host.Perbaikan atau saran dipersilahkan. Ini satu-satunya liner saya:
sumber
Jika Anda memiliki lebih dari beberapa, periksa artikel LJ dengan skrip shell yang bagus.
http://linuxgazette.net/123/bechtel.html
7zip mendapatkan kompresi yang lebih baik, dan multi-threaded.
sumber
Baru saja melakukan ini beberapa menit yang lalu:
Di mana
rezip
akan didefinisikan sebagai:Secara opsional, Anda juga dapat membuatnya multi-utas dengan menggunakan
-P
opsi denganxargs
, tetapi berhati-hatilah dengan opsi itu. (Mulai rendah!)sumber