Saya ingin mengompres file teks menggunakan alat baris perintah gzip sambil menyimpan file asli. Secara default menjalankan perintah berikut
gzip file.txt
hasil dalam memodifikasi file ini dan mengganti nama file itu file.txt.gz
. alih-alih perilaku ini saya ingin memiliki file terkompresi baru ini selain yang sudah ada file.txt
. Untuk saat ini saya menggunakan perintah berikut untuk melakukan itu
gzip -c file.txt > file.txt.gz
Ini bekerja tetapi saya bertanya-tanya mengapa tidak ada solusi yang lebih mudah untuk melakukan tugas bersama seperti itu? Mungkin saya melewatkan opsi melakukan itu?
command-line
files
gzip
Manuel Selva
sumber
sumber
Jawaban:
Untuk GNU
gzip
1.6 atau lebih baru, FreeBSD dan turunannya atau versi NetBSD terbaru, lihat jawaban don_cristi .Dengan versi apa pun, Anda dapat menggunakan pengalihan shell seperti pada:
Ketika tidak diberi argumen,
gzip
baca input standarnya, kompres dan tulis versi terkompresi ke output standarnya. Sebagai bonus, saat menggunakan pengalihan shell, Anda tidak perlu khawatir tentang file yang dipanggil"--help"
atau"-"
(yang terakhir masih menjadi masalah bagigzip -c --
).Manfaat lain
gzip -c file > file.gz
adalah bahwa jikafile
tidak dapat dibuka, perintah akan gagal tanpa membuat yang kosongfile.gz
(atau menimpa yang sudah adafile.gz
) dan tanpa menjalankangzip
sama sekali.Perbedaan yang signifikan dibandingkan dengan
gzip -k
meskipun adalah bahwa tidak akan ada upaya menyalinfile
metadata (kepemilikan, izin, waktu modifikasi, nama file yang tidak terkompresi) kefile.gz
.Juga jika
file.gz
sudah ada, itu akan diam-diam menimpanya kecuali Anda telah mengaktifkannoclobber
opsi di shell Anda (set -o noclobber
misalnya dengan shell POSIX).sumber
-c
.-k
pilihannya? Tidak dapat menemukannya di halaman manual, mis. Versi ini di sini linux.die.net/man/1/gzip . Juga, sepertinya gzip menyalin metadata file secara default.Perhatikan bahwa baru-baru ini (Juni 2013) dirilis "menerima opsi --keep (-k), untuk konsistensi dengan alat-alat seperti xz, lzip dan bzip2. Dengan opsi ini, gzip tidak lagi menghapus file input bernama ketika mengompresi atau mendekompresi" .
gzip-1.6
Kutipan dari halaman manual:
Jadi,
1.6
Anda dapat menggunakan-k
atau--keep
menyimpan file asli:(perhatikan bahwa itu tidak berfungsi jika
$file
is-
(yanggzip
mengartikan sebagai stdin alih-alih file yang sebenarnya disebut-
), dalam hal ini, Anda harus mengubahnya ke./-
)Opsi itu pertama kali diperkenalkan dalam implementasi FreeBSD
gzip
(dalam FreeBSD 7.0 pada 2007) untuk konsistensi denganbzip2
. Itugzip
didasarkan pada penulisan ulang GNUgzip
oleh NetBSD. The-k
pilihan akhirnya berhasil kembali ke NetBSD pada tahun 2010 .sumber
Dari dokumentasi tampaknya tidak ada opsi untuk membuat salinan file.
Anda dapat mendefinisikan fungsi shell
lalu
sumber
-
, Anda harus menyebutnya sebagaigzipkeep ./-
.