Anda dapat menggunakan gzip -r myfolderfile gzip mana yang akan dilakukan secara rekursif. Cara yang sama Anda dapat membuka zip file gunzip -r myfolder yang akan membuka zip file secara rekursif. Untuk informasi lebih lanjut, man gzip
Valentin Bajrami
12
Gunakan tar; ini mendukung opsi untuk kompresi. gzipdirancang sebagai pelengkap tar, bukan sebagai pengganti.
devnull
13
Perhatikan bahwa saran @ val0x00ff hampir pasti bukan yang ingin Anda capai.
Shadur
4
@ Shadur itu sebabnya saya mempostingnya commentkarena itu bukan jawaban untuk pertanyaannya.
Valentin Bajrami
2
Untuk mendemostrasikan apa artinya @Shadur. File yang diberikan 1dan di 2bawah folder playground. gzip -r ./playgroundakan memberi Anda 1.gzdan 2.gz(dan tidak ada lagi 1dan 2file) di bawah folder playground, BUKAN file zip dengan segala yang ada di dalamnya.
Jeff Xiao
Jawaban:
660
Tidak.
Tidak seperti zip, gzipberfungsi sebagai algoritma kompresi hanya .
Karena berbagai alasan beberapa yang mendengarkan kembali ke era tape drive, Unix menggunakan sebuah program bernama taruntuk mengarsipkan data, yang kemudian dapat dikompresi dengan program kompresi seperti gzip, bzip2, 7zip, dll
Untuk "zip" direktori, perintah yang benar adalah
tar -zcvf archive.tar.gz directory/
Ini akan memberitahu tarke
kompres dengan menggunakan algoritma z (gzip)
c (buat) arsip dari file-file di directory( tarbersifat rekursif secara default)
v (secara verbal) daftar (di / dev / stderr sehingga tidak memengaruhi perintah pipa) semua file yang ditambahkan ke arsip.
dan menyimpan output sebagai nama f (file)archive.tar.gz
The tarperintah menawarkan gzipdukungan (melalui -zbendera) semata-mata untuk kenyamanan Anda. The gzipperintah / lib benar-benar terpisah. Perintah di atas secara efektif sama dengan
tar -cv directory | gzip > archive.tar.gz
Untuk mendekompres dan membongkar arsip ke direktori saat ini yang akan Anda gunakan
tar -zxvf archive.tar.gz
Perintah itu secara efektif sama dengan
gunzip < archive.tar.gz | tar -xv
tarmemiliki banyak, banyak, BANYAK opsi dan penggunaan lainnya juga; Saya sungguh-sungguh merekomendasikan untuk membaca halaman manualnya kapan-kapan.
Hanya untuk membuat hal-hal menjadi lebih eksplisit, ini persis sama dengan tar -cv directory | gzip > archive.tar.gz. Arsip yang dihasilkan kemudian dapat diekstraksi dengan tar -zxvfatau bahkan zcat file.tar.gz | tar -xv. Intinya adalah bahwa tar sepenuhnya independen dari gzip, tarperintahnya hanya menyertakan dukungan gzip untuk kenyamanan.
Patrick
Saya telah menggunakan tar cvzfcukup lama. satu hal yang perlu diperhatikan: jika Anda menggunakan Windows ( 7-zipditentukan) untuk membuka ritsleting *.tar.gzfile, dibutuhkan dua putaran. Satu untuk unzip *.tar.gzfile menjadi *.tarfile, yang berikutnya untuk unzip file tar ke konten asli. itu meningkatkan waktu unzipping total, terutama untuk file besar (misalnya log)
Jeff Xiao
1
Apakah penamaan arsip memengaruhi sesuatu yang bijaksana secara mesin? Saya tahu akan lebih baik untuk memberi tahu orang-orang algoritma yang awalnya digunakan untuk zip itu (karenanya .gz), tetapi selain itu apakah itu benar-benar peduli bagaimana Anda memberi nama arsip?
hello_there_andy
3
@hello_there_andy Tidak ada bedanya dengan sebagian besar unix, tetapi windows (dan penyelesaian tab cerdas di linux) akan membuat asumsi berdasarkan ekstensi nama file.
The gzipPerintah tidak akan secara rekursif kompres direktori ke file zip tunggal, bila menggunakan -rswitch. Alih-alih itu akan berjalan struktur direktori dan zip setiap file yang ditemukannya ke file terpisah.
#!/bin/bash
if [[ -d $1 ]]; then
cd "$1"
cd ..
base=$(basename "$1")
tar -zcvf "$base.tgz" "$base"
if [[ $? == 0 && -f "$base.tgz" ]]; then
rm -rf "$base"
fi
else
echo "Usage: $0 DIRECTORY";
fi
ungzipdir:
#!/bin/bash
if [[ -f $1 ]]; then
base=${1%%.*}
file=$(basename "$1");
dir=$(basename "$base");
if [[ ! -d $base ]]; then
mkdir "$base"
cd "$base"
cd ..
tar -xvf "$file"
if [[ $? == 0 && -d "$dir" ]]; then
rm -f "$file"
fi
else
echo "Directory $base already exists. Nothing done."
fi
else
echo "Usage: $0 file.tgz";
fi
(!!!) Silakan uji sebelum digunakan (karena ada 'rm -f' yang berpotensi menghapus data penting jika digunakan dengan cara yang tidak umum).
Cara Penggunaan:
cd /home/; gzipdir MyDirectory atau gzipdir /home/MyDirectory
Akan membuat / home / MyDirectory.tgz dan menghapus MyDirectory jika berhasil (!!!).
ungzipdir /home/MyDirectory.tgz
Akan membuat / home / MyDirectory dan menghapus /home/MyDirectory.tgz jika berhasil.
Untuk mem-zip SEMUA file dalam direktori: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (hati-hati dengan perintah find, ujilah dengan yang -exec echo {}pertama, dan pastikan Anda tidak menangkap './' yang akan mem-zip direktori PARENT, mungkin merusak seluruh dir home)
andrew lorien
1
Saya sarankan menggunakan pigz( Implementasi Paralel GZip )
Jika Anda memiliki pertanyaan baru, silakan tanyakan dengan mengklik tombol Ajukan Pertanyaan . Sertakan tautan ke pertanyaan ini jika itu membantu menyediakan konteks. - Dari Ulasan
Jeff Schaller
2
@ JeffSchaller: Ini adalah jawaban. Itu salah besar (saya percaya), tapi jelas itu adalah jawaban.
Scott
1
@ukuran: Saya cukup yakin perintah yang Anda posting tidak, pada kenyataannya, menggunakan gzip.
Dhag
1
Poin untuk menggunakan zip seperti pertanyaan yang diajukan, kemungkinan besar penulis ingin mengetahui bahwa mungkin untuk MELAKUKAN HAL YANG SAMA seperti yang biasa dilakukannya di windows. Sangat menyedihkan kebanyakan orang tidak ingin berpikir sejauh ini.
Florian Heigl
2
Sulit ketika pertanyaan menentukan ... "menggunakan gzip".
Jeff Schaller
1
Untuk kelengkapan, jika Anda ingin menar file di latar belakang, gunakan jawaban @ Shadur dan tambahkan &pada akhirnya:
gzip -r myfolder
file gzip mana yang akan dilakukan secara rekursif. Cara yang sama Anda dapat membuka zip filegunzip -r myfolder
yang akan membuka zip file secara rekursif. Untuk informasi lebih lanjut,man gzip
tar
; ini mendukung opsi untuk kompresi.gzip
dirancang sebagai pelengkaptar
, bukan sebagai pengganti.comment
karena itu bukan jawaban untuk pertanyaannya.1
dan di2
bawah folderplayground
.gzip -r ./playground
akan memberi Anda1.gz
dan2.gz
(dan tidak ada lagi1
dan2
file) di bawah folderplayground
, BUKAN file zip dengan segala yang ada di dalamnya.Jawaban:
Tidak.
Tidak seperti
zip
,gzip
berfungsi sebagai algoritma kompresi hanya .Karena berbagai alasan beberapa yang mendengarkan kembali ke era tape drive, Unix menggunakan sebuah program bernama
tar
untuk mengarsipkan data, yang kemudian dapat dikompresi dengan program kompresi sepertigzip
,bzip2
,7zip
, dllUntuk "zip" direktori, perintah yang benar adalah
Ini akan memberitahu
tar
kekompres dengan menggunakan algoritma z (gzip)
c (buat) arsip dari file-file di
directory
(tar
bersifat rekursif secara default)v (secara verbal) daftar (di / dev / stderr sehingga tidak memengaruhi perintah pipa) semua file yang ditambahkan ke arsip.
dan menyimpan output sebagai nama f (file)
archive.tar.gz
The
tar
perintah menawarkangzip
dukungan (melalui-z
bendera) semata-mata untuk kenyamanan Anda. Thegzip
perintah / lib benar-benar terpisah. Perintah di atas secara efektif sama denganUntuk mendekompres dan membongkar arsip ke direktori saat ini yang akan Anda gunakan
Perintah itu secara efektif sama dengan
tar
memiliki banyak, banyak, BANYAK opsi dan penggunaan lainnya juga; Saya sungguh-sungguh merekomendasikan untuk membaca halaman manualnya kapan-kapan.sumber
tar -cv directory | gzip > archive.tar.gz
. Arsip yang dihasilkan kemudian dapat diekstraksi dengantar -zxvf
atau bahkanzcat file.tar.gz | tar -xv
. Intinya adalah bahwa tar sepenuhnya independen dari gzip,tar
perintahnya hanya menyertakan dukungan gzip untuk kenyamanan.tar cvzf
cukup lama. satu hal yang perlu diperhatikan: jika Anda menggunakan Windows (7-zip
ditentukan) untuk membuka ritsleting*.tar.gz
file, dibutuhkan dua putaran. Satu untuk unzip*.tar.gz
file menjadi*.tar
file, yang berikutnya untuk unzip file tar ke konten asli. itu meningkatkan waktu unzipping total, terutama untuk file besar (misalnya log)The
gzip
Perintah tidak akan secara rekursif kompres direktori ke file zip tunggal, bila menggunakan-r
switch. Alih-alih itu akan berjalan struktur direktori dan zip setiap file yang ditemukannya ke file terpisah.Contoh
sebelum
sekarang jalankan
gzip
perintahsetelah
Jika Anda lebih suka untuk zip up struktur direktori maka Anda mungkin ingin menggunakan
tar
perintah, dan kemudian kompres.tar
file yang dihasilkan .Contoh
Yang menghasilkan file tunggal berikut:
Anda dapat mengkonfirmasi isinya:
sumber
Saya menuliskan 2 perintah ini:
gzipdir
:ungzipdir
:(!!!) Silakan uji sebelum digunakan (karena ada 'rm -f' yang berpotensi menghapus data penting jika digunakan dengan cara yang tidak umum).
Cara Penggunaan:
cd /home/; gzipdir MyDirectory
ataugzipdir /home/MyDirectory
Akan membuat / home / MyDirectory.tgz dan menghapus MyDirectory jika berhasil (!!!).
ungzipdir /home/MyDirectory.tgz
Akan membuat / home / MyDirectory dan menghapus /home/MyDirectory.tgz jika berhasil.
sumber
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(hati-hati dengan perintah find, ujilah dengan yang-exec echo {}
pertama, dan pastikan Anda tidak menangkap './' yang akan mem-zip direktori PARENT, mungkin merusak seluruh dir home)Saya sarankan menggunakan
pigz
( Implementasi Paralel GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
sumber
Jawaban untuk pertanyaan "Dapatkah saya meng-zip seluruh folder menggunakan zip di linux?" Adalah dengan menggunakan sintaks:
sumber
Untuk kelengkapan, jika Anda ingin menar file di latar belakang, gunakan jawaban @ Shadur dan tambahkan
&
pada akhirnya:sumber
Jika tar Linux Anda tidak mendukung
-z
opsi, Anda dapat menggunakan yang berikut ini:sumber