Perintah apa yang saya perlukan untuk unzip / mengekstrak file .tar.gz?

829

Saya menerima file .tar.gz besar dari klien yang berisi sekitar 800 mb file gambar (saat tidak dikompresi). Ftp perusahaan hosting kami sangat lambat, jadi mengekstrak semua file secara lokal dan mengirimkannya melalui ftp tidak praktis. Saya dapat mem-ftp file .tar.gz ke situs hosting kami, tetapi ketika saya ssh ke direktori saya dan mencoba menggunakan unzip, itu memberi saya kesalahan ini:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

Perintah apa yang perlu saya gunakan untuk mengekstrak semua file dalam file .tar.gz?

EmmyS
sumber

Jawaban:

1389

Ketik man taruntuk informasi lebih lanjut, tetapi perintah ini harus melakukan trik:

tar -xvzf community_images.tar.gz

Untuk menjelaskan lebih jauh, tar mengumpulkan semua file ke dalam satu paket community_images.tar,. Program gzip menerapkan kompresi, maka ekstensi gz. Jadi perintah itu melakukan beberapa hal:

  • f: Ini harus menjadi bendera terakhir dari perintah, dan tar f ile harus segera setelah. Ini memberitahu tar nama dan jalur file terkompresi.
  • z: memberitahu tar untuk mendekompres arsip menggunakan gz ip
  • x: Tar dapat mengumpulkan file atau e x proselyting mereka. xmelakukan yang terakhir.
  • v: membuat tar banyak bicara. V erbose output menunjukkan semua file yang sedang diekstraksi.
djeikyb
sumber
5
@Shiki Saya melihat edit yang Anda ajukan. Saya pikir ini bukan perubahan yang tepat, saya lebih suka cara saya menjelaskan alat ini. Saya tidak berpikir Anda tar -xfsaran akan membuat jawaban tambahan yang besar.
djeikyb
3
Ini adalah salah satu penjelasan yang lebih baik dari jutaan pertanyaan yang diutarakan serupa
JohnMerlino
1
@KasunSiyambalapitiya Secara default, berakhir di folder saat ini. Lihat juga man tar; cari -Copsi. Atau mungkin periksa jawaban lainnya 😉
djeikyb
6
Mengingatkan saya pada artikel xckd tentang tar. Saya harus kembali setiap waktu.
mgarey
19
Mnemonik saya untuk ini adalah: x saluran z e v *** ing f iles.
Agargara
172

Jika Anda ingin file diekstraksi ke tujuan tertentu, Anda dapat menambahkan Pastikan Anda membuat direktori terlebih dahulu, dalam hal ini: ~ / Gambar / Komunitas-C /destination/path/

Contoh:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

Anda dapat dengan mudah menghafal jika Anda mempertimbangkan mengatakan tar e X saluran a F ile

gif proses dilakukan di terminal

Catatan: Ingat, Anda dapat mencari di dalam halaman manual dengan ?+ istilah untuk mencari, dan kemudian ndan Nuntuk pergi ke contoh berikutnya atau sebelumnya dari istilah yang Anda cari.

JorgeArtware
sumber
5
jangan lupa C untuk " direktori c hange"! juga, saya merasa lebih baik untuk tidak mencampur opsi tanda hubung dan non-tanda hubung (terutama membingungkan saat menggunakan ps).
djeikyb
2
Mengapa tidak - seperti setiap perintah lainnya?
Jan M.
6
Saya suka petunjuk Anda 'tar to e X tract a F ile'
Nam G VU
2
1+ untuk gif animasi
Nick Steele
Anda juga dapat menggunakan --directory="/home/emmys/Pictures/Community/"(yang saya pikir lebih mudah diingat daripada -C).
Patrick Dark
107

Pada titik tertentu tarditingkatkan ke dekompresi otomatis. Yang Anda butuhkan sekarang adalah:

tar xf community_images.tar.gz

Penjelasan yang sama berlaku:

  • f: Ini harus menjadi bendera terakhir dari perintah, dan tar f ile harus segera setelah. Ini memberitahu tar nama dan jalur file terkompresi.
  • x: e x traktekan file.

Perhatikan kurangnya tanda hubung untuk bendera perintah. Ini karena sebagian besar versi tar memungkinkan opsi gaya gnu dan bsd (secara sederhana, gnu memerlukan tanda hubung, bsd tidak).

djeikyb
sumber
1
Apakah ada dokumentasi tentang ini? Saya sudah mencari-cari referensi untuk ini, saya tidak pernah menggunakan flag -z dan semuanya jadi gzip jadi saya khawatir jika saya belum mengompresi tarbal saya sama sekali, haha. Terima kasih.
Neurosnap
2
@neurosnap lihat manual gnu dan manual bsd
djeikyb
3
Mungkin akan lebih baik untuk mengedit jawaban asli Anda.
Seth
3
@Seth rasanya / terasa cukup berbeda untuk menjadi jawaban yang terpisah, terutama dalam konteks edit destruktif yang memancingnya. Saya akan memikirkannya kembali setelah bekerja, mungkin cara yang lebih mudah untuk digabungkan daripada yang saya kira.
djeikyb
2
@EnricoMariaDeAngelis bsd tar sejak setidaknya 2004 dan gnu tar sejak setidaknya 2010 telah mendukung pemilihan otomatis sebuah dekompresor. mungkin tidak ada versi tar "baru-baru ini" (abad ini? sembilan puluhan +?) yang membutuhkan pemilihan dekompresor secara manual.
djeikyb
11

Mengingat semua bendera tarbisa membosankan. XKCD wajib:

masukkan deskripsi gambar di sini

Oleh karena itu saya membuat skrip kecil saya sendiri dengan Python untuk melakukan itu. Cepat, kotor, cp-seperti dalam penggunaan:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

Gunakan seperti itu:

myuntar.py archive.tar

Lihat juga skrip serupa untuk membuka ritsleting arsip zip .

Sergiy Kolodyazhnyy
sumber
2
:) hanya dua flag tar yang harus diingat -cafuntuk dibuat berdasarkan nama file dan -xfuntuk mengekstraksi (AFAIK bekerja pada setiap jenis tar).
Videonauth
@Videonauth Saya tahu, ini tidak rumit, tetapi untuk beberapa alasan saya tidak pernah mengingat opsi ini. Mungkin karena saya tidak cukup sering menangani arsip.
Sergiy Kolodyazhnyy
akankah ini hanya melakukan file tar gzip? api docs menyebutkan mode untuk membaca dengan kompresi transparan; apakah itu akan berperilaku lebih seperti tar xf <file>?
djeikyb
7

Jawaban cepat:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ CATATAN ]:

  • -v Daftar file yang diproses secara verbal.
  • -z Saring arsip melalui gzip.
  • -f Gunakan file arsip atau perangkat ARCHIVE.
  • -x Ekstrak file dari arsip.
  • -j bzip2.
  • tar -xfarchive.tar # Ekstrak semua file dari archive.tar.
Benyamin Jafari
sumber
4

Jika Anda tidak dapat mengekstraksi .tar.gzfile menggunakan

tar -xvzf fileName.tar.gz

Coba ekstraksi menggunakan

tar xf fileName.tar.gz
Shravan40
sumber
4
jika itu adalah file tar yang di-gzip, perintah pertama akan selalu berfungsi. jika tidak berfungsi, Anda tidak memiliki file tar yang di-gzip. perintah terakhir adalah rekomendasi yang bagus untuk orang-orang yang tidak peduli algoritma kompresi apa yang digunakan pada file tar mereka.
djeikyb
0

Anda bisa melakukan ini juga di langkah pertama:

gunzip community_images.tar.gz

Kemudian Anda memiliki file: community_images.tar

Langkah kedua adalah:

tar -xvf community_images.tar

Dan file * .tar akan diekstraksi.

dschinn1001
sumber
0

tar xvf file.tar.gz

  • x untuk ekstrak
  • v untuk verbose (daftar file)
  • f untuk nama file berikutnya

Versi tar modern mana pun dari jarak jauh harus secara otomatis mendeteksi bahwa arsip di-gzip, dan menambahkan "z" untuk Anda.

delt
sumber