Saya memiliki file .7z yang berisi ~ 360.000 gambar di banyak direktori. Saya ingin mengonversinya menjadi .tar sehingga saya dapat membukanya di komputer lain. Apakah ada cara yang lebih baik daripada mengekstraknya ke file dan mengompresnya lagi? Apakah mungkin melakukan konversi secara langsung?
10
.7z
file di komputer lain?Jawaban:
Tidak terlalu sulit untuk menulis sesuatu untuk melakukan pekerjaan itu. Berikut ini contoh skrip Perl (memerlukan modul Archive :: Libarchive :: XS ).
Jika Anda menginginkan arsip tar.gz / tar.bz2 / tar.xz, tambahkan baris
archive_write_add_filter_gzip($out);
atauarchive_write_add_filter_bzip2($out);
atauarchive_tar_add_filter_xz($out);
setelaharchive_write_set_format
baris.Ini tidak menggunakan ruang disk sementara (hanya ruang untuk file tar output) dan RAM sangat sedikit (hanya beberapa MB untuk perl, tetapi ia bekerja dengan file satu blok pada suatu waktu, jadi itu tidak masalah jika file Anda lebih besar dari RAM Anda).
sumber
.7z
arsip adalah arsip yang sering dikompres dengan beberapa jenis algoritma, sedangkan.tar
arsip hanya arsip.Mereka berbeda dalam ruang lingkup mereka, dan dalam kebanyakan kasus konversi akan memerlukan dekompresi opsional selalu diikuti oleh ekstraksi arsip sumber. Sekalipun
.7z
arsip tidak akan menggunakan kompresi apa pun, masih membutuhkan ekstraksi.Yang sedang berkata, Jika Anda bermaksud [mendekompresi] / mengekstrak / mengarsip ulang arsip sumber sekaligus, jawabannya adalah Anda tidak bisa, setidaknya tidak menggunakan alat default Ubuntu karena
tar
tidak dapat membaca daristdin
, sehingga Anda tidak dapat mengirim pipa7z
dantar
. Pokoknya sangat mudah untuk mengotomatisasi semuanya dalam satu perintah:* <path_to_archive> = path ke
.7z
arsip sumberJuga waktu yang diperlukan untuk file arsip sumber untuk ditulis ke disk dan untuk file yang diekstraksi untuk dibaca untuk [mendekompresi] / mengekstrak / mengarsip ulang arsip sumber dalam dua langkah adalah hambatan untuk seluruh tugas sebagian besar (walaupun tidak hanya) karena potensi rendahnya kecepatan I / O disk, sehingga solusi parsial adalah dengan menyimpan file sementara ke ramdisk untuk hampir membatalkan keseluruhan bottleneck:
sudo mkdir /mnt/tmpfs
sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk
* <tmpfs_size> = ukuran sistem file dalam byte * 10 3 (1, 1K, 1M, 1G, ...)mkdir /mnt/tmpfs/tmp && 7z x <path_to_source_archive> -o/mnt/tmpfs/tmp && tar cf archive.tar /mnt/tmpfs/tmp && rm -rf /mnt/tmpfs/tmp
* <path_to_archive> = path ke.7z
arsip sumbersudo umount
sudo rmdir /mnt/tmpfs
sumber