Bagaimana cara melakukan “File untuk disimpan tanpa kompresi” dalam 7-zip?

25

Apakah ada cara untuk secara selektif mencegah jenis file tertentu dari kompresi di 7-zip, seperti di WinRAR?

Saya mencoba mengompres folder besar (banyak gigabyte), dan saya tidak ingin file yang sudah dikompres (misalnya file ZIP) dikompres ulang - mereka harus disimpan tanpa kompresi.

Mehrdad
sumber
Apakah ada alasan khusus (menghemat setiap sedikit waktu pemrosesan yang mungkin, membacanya tanpa harus menggabungkan biner 7z atau mengimplementasikan kembali LZMA, dll.) Yang ingin Anda lakukan ini? Secara umum, sebagian besar alat kompresi yang saya jalankan cenderung cukup pintar untuk secara otomatis menyimpan hal-hal yang tidak terkompresi jika mereka menemukan file merespons dengan buruk terhadap upaya untuk mengompres lebih lanjut.
ssokolow
@ssokolow: Sudah 4 tahun dan saya kira saya tidak pernah menjawab pertanyaan Anda, tetapi bisa ada alasan lain seperti meminimalkan kerusakan akibat korupsi dan juga membuatnya lebih mudah untuk memulihkan data dalam bencana.
Mehrdad
Pertanyaan yang terhubung: unix.stackexchange.com/questions/241898/…
bohdan_trotsenko

Jawaban:

19

Ya, dimungkinkan untuk memiliki metode kompresi yang berbeda untuk file yang berbeda dalam arsip 7-Zip yang sama.

Gunakan versi baris perintah 7-Zip dengan -mparameter untuk menentukan metode sebagai Copy, yang berarti tidak ada kompresi.

Contoh:

7za a -m0=Copy tmp7.7z *.txt

Untuk info lebih lanjut, lihat sakelar -m (Atur Metode kompresi) .

harrymc
sumber
Perintah di atas tidak akan memampatkan file txt dan hanya menambahkan file txt ke arsip yang ada. Sebelum menjalankan perintah di atas, file arsip harus dibuat dengan file non-txt. Tidak mudah jika ada n berbagai jenis file.
Praveen Sripati
Jika -m0=Copytidak berhasil, coba -mx=0.
Bora M. Alper
15

Mari kita asumsikan Anda memiliki file zip dan Anda memiliki file txt terkompresi di folder Anda.

Langkah pertama adalah membuat arsip mengompresi file txt menggunakan perintah berikut.

Anda dapat menggunakan -m untuk mengatur level kompresi, ini juga tergantung pada metode kompresi yang Anda gunakan

Mari kita asumsikan di sini sebagai kompresi standar saja

7z a compressed.7z *.txt -r 

Anda akan dikompresi.7z sekarang.

Langkah kedua adalah menyalin file yang sudah dikompresi ke arsip ini atau membuat arsip baru

7z u compressed.7z -u!update.7z -mx0 *.zip 

Ada elaborasi lebih lanjut dari perintah pembaruan di sini

Dan jika Anda memiliki kebebasan untuk menggunakan antarmuka grafis, pembaruan dapat dilakukan dengan cara berikut

masukkan deskripsi gambar di sini

Manish Singh
sumber
Agak merepotkan, tapi saya rasa itu akan berhasil, terima kasih.
Mehrdad
1

Saya membuat skrip PowerShell yang akan dengan cepat memampatkan direktori dengan menyimpan tipe file yang sudah dikompresi (seperti file .zip) tanpa mencoba untuk mengompresnya kembali. Ini menggunakan antarmuka baris perintah 7zip dan menggunakan ekstensi nama file untuk memutuskan apakah akan memampatkan atau hanya menyimpan file yang diberikan.

Anda dapat menemukan skrip di sini: https://gist.github.com/ivanatpr/5dea086172eab573ba71

ivanatpr
sumber
0

Secara teknis, file terkompresi tidak memampatkan lebih lanjut, sesuatu tentang batas entropi atau semacamnya, saya lupa detailnya, tetapi yang paling Anda akan dapatkan adalah kurang dari 2% yang pernah saya lihat.

Kebanyakan kompresor bagus memeriksa kompresi dan hanya menyimpan file yang tidak dapat dikompresi karena mengompresi kemudian akan menambah overhead dan meningkatkan ukuran.

Tentu saja, ada pekerjaan & waktu melihat file di tempat pertama.

Seperti yang dibahas dalam jawaban lain, melakukan beberapa lintasan melewati fileset Anda mungkin akan menjadi solusi terbaik dan mudah skrip.

Buat arsip 7z dan tambahkan segalanya TETAPI file terkompresi dalam satu pass, kemudian tambahkan file pra-kompresi sebagai data non-kompresi. (Saya akan melakukannya dengan cara ini karena hal-hal yang dapat dikompresi akan berada di awal arsip dan yang tidak dapat dimampatkan pada akhirnya. Ini akan mengalir lebih cepat dari drive karena berdekatan)

(terlalu banyak menggunakan 'kompres ...'!)

lornix
sumber
1
Jika itu membantu siapa pun, inilah intisari "sesuatu tentang batas entropi atau semacamnya". Entropi dapat dianggap sebagai ukuran dari ketidakpastian. Gagasan di balik kompresi adalah bahwa, jika Anda dapat memprediksi pola bit, Anda tidak perlu menyimpan semuanya ... hanya instruksi yang lebih ringkas tentang cara memperkirakannya (sebuah codeword). Entropi maksimum teoretis dicapai ketika kemungkinan besar bahwa kata sandi berikutnya bisa berupa apa saja. Menekan lebih banyak kompresi dari data terkompresi terjadi ketika pass kedua mengidentifikasi prediktabilitas sisa dalam output yang pertama.
ssokolow