Bagaimana saya bisa melihat konten file tar.gz tanpa mengekstraksi dari command-line?

246

Saya ingin melihat konten (daftar file dan folder) dari suatu arsip, misalnya tar.gzfile tanpa mengekstraknya .

Apakah ada metode untuk melakukan itu?

Avinash Raj
sumber

Jawaban:

265

Jalankan perintah di bawah ini di terminal untuk melihat konten file tar.gz tanpa mengekstraknya:

tar -tf filename.tar.gz

tangkapan layar dari daftar file tarball terkompresi di terminal

-t, --list Menampilkan
daftar arsip. Argumen bersifat opsional. Ketika diberikan, mereka menentukan nama-nama anggota untuk dicantumkan.

Avinash Raj
sumber
1
apakah semua contoh ini untuk melihat ke dalam file terkompresi bekerja pada tipe format lain juga. seperti zip, rar, tar dll?
Ciasto piekarz
3
tar -tvf xxx.tgzini juga akan menunjukkan properti detail file.
Eric Wang
4
pipa itu untuk treemelihat tampilan pohontar -tf filename.tar.gz | tree
blockloop
Untuk zip / rar gunakan unzip -l/unrar -l
pLumo
Jika Anda ingin mendaftar hingga kedalaman / level tertentu hanya lihat di sini .
holzkohlengrill
120

Anda juga dapat menggunakan vim

vim filename.tar.gz
sm
sumber
9
Ini luar biasa. Anda juga dapat melihat konten file!
Nico
1
Atau menggunakan Ex Editor: ex +%p foo.tar.gz.
kenorb
@Nico Bagaimana Anda menggunakan ini untuk melihat konten file di dalam tgz?
1252748
1
Ketika Anda membuka file de dengan vim ( vim file.tar.gz) dikatakan "Pilih file dengan kursor dan tekan ENTER". Anda lakukan itu, gerakkan kursor di atas file dan tekan ENTER.
Nico
2
Dengan arsip besar Anda hanya harus bersabar. Ini bisa sangat lama untuk memuat struktur folder. :-)
Hugo H
41

lessjuga dapat membuka arsip yang gzdikompresi dan tidak dikompresi tar. Ini memberi Anda ls -loutput gaya yang indah juga:

$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gz
drwxrwxr-x 0/0               0 2012-09-21 11:41 debian/
drwxrwxr-x 0/0               0 2012-08-09 13:32 debian/source/
-rw-rw-r-- 0/0              12 2012-08-09 13:32 debian/source/format
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/libdecoration0-dev.docs
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/compiz-dev.docs
-rw-rw-r-- 0/0             347 2012-08-09 13:32 debian/compiz-core.install
-rw-rw-r-- 0/0             125 2012-08-09 13:32 debian/libdecoration0-dev.install
...

Dan karena itu less, Anda dapat menggulirnya, mencarinya, dll. Namun gagal dengan algoritma kompresi lainnya (menurut pengalaman saya).

Oli
sumber
5
Tidak bekerja untuk saya. Ditampilkan sebagai file biner.
JeromeJ
2
Anda yakin tidak memiliki aliasopsi khusus lessyang tidak Anda tampilkan di sini? Saya hanya mencoba melihatnya, tetapi tidak berhasil. Saya tidak memiliki pengaturan alias untuk less.
code_dredd
37

Anda bisa menggunakan perintah z: zcat, zless, zgrep.

Untuk melihat konten file gunakan:

zcat file.gz   

Untuk mendapatkan sesuatu gunakan:

zgrep test file.gz   

Untuk memeriksa perbedaan antar file, gunakan:

zdiff file1.gz file2.gz

Ini hanya beberapa contoh, masih banyak lagi.

krt
sumber
9

tar's -tbendera akan daftar isi untuk Anda. Tambahkan itu ke flag Anda yang lain (jadi -tvfzuntuk a tar.gz, -tvfjuntuk a tar.bz2, dll) dan Anda dapat menjelajah tanpa mengekstraksi. Dari sana Anda dapat mengekstrak file tunggal dengan cukup mudah

tar -xvfz mybackup.tar.gz path/to/file

Masalah besar dengan taryang mengingat semua bendera lainnya . Jadi saya biasanya mengandalkan 7z( p7zip-fullpaket) untuk melakukan semua pengarsipan saya. Saya tidak akan mengklaim itu sepenuhnya lebih baik tetapi mendukung hampir semua (tanpa harus menentukan jenis kompresi) dan argumennya logis.

7z l archive.ext
7z e archive.ext path/to/file

Ini tentu saja kurang mampu, tetapi Anda tidak perlu halaman manual untuk menggunakannya.

Ada juga Midnight Commander ( mc). Ini adalah badass all-around untuk manajemen file berbasis terminal kuasi-grafis dan dengan beberapa pengujian ringan hanya membiarkan Anda menelusuri keduanya .tar.gzdan .7zarsip. Saya tidak yakin berapa banyak yang didukung.

Oli
sumber
t-ar dulu dan namanya memang singkatan dari pengarsipan tape , yang berteriak sekuensial dan dalam banyak kasus PIA. Khususnya sebagai tar ganda + gz yang tak terhindarkan ini hanya kejam. Juga pindah ke 7zip sekarang.
Frank Nocke
9

Yah, itu tergantung pada file. Sebagian besar (de) program kompresi memiliki bendera yang mencantumkan konten arsip.

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbzfile

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip file

    $ zip -sf foo.zip 
    Archive contains:
      dir1/
      dir2/
      dir1/subdir1/
      dir1/subdir1/file
      dir1/subdir2/
      dir1/subdir2/file
    Total 6 entries (0 bytes)
    
  3. 7zip file

    $ 7z l foo.7z 
    
    7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
    p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)
    
    Listing archive: foo.7z
    
    --
    Path = foo.7z
    Type = 7z
    Solid = -
    Blocks = 0
    Physical Size = 168
    Headers Size = 168
    
       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir1/file
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir2/file
    2015-03-30 19:07:32 D....            0            0  dir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir1
    2015-03-30 19:00:06 D....            0            0  dir1
    ------------------- ----- ------------ ------------  ------------------------
                                         0            0  2 files, 4 folders
    
  4. rar file

     $ rar v foo.rar 
    
    RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
    Trial version             Type RAR -? for help
    
    Archive foo.rar
    
    Pathname/Comment
                      Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
    -------------------------------------------------------------------------------
     dir1/subdir1/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir2/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1/subdir2
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir2
                         0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
    -------------------------------------------------------------------------------
        6                0       16   0%
    

Itu sebagian besar format arsip yang lebih populer. Dengan semua ini dalam pikiran, Anda bisa menulis skrip kecil yang menggunakan perintah yang sesuai tergantung pada ekstensi file yang Anda berikan padanya:

#!/usr/bin/env bash

for file in "$@"
do
    printf "\n-----\nArchive '%s'\n-----\n" "$file"
    ## Get the file's extension
    ext=${file##*.}
    ## Special case for compressed tar files. They sometimes
    ## have extensions like tar.bz2 or tar.gz etc.
    [[ "$(basename "$file" ."$ext")" =~ \.tar$ ]] && ext="tgz"

    case $ext in
        7z)
            type 7z >/dev/null 2>&1 && 7z l "$file" || 
            echo "ERROR: no 7z program installed"
            ;;
        tar|tbz|tgz)
            type tar >/dev/null 2>&1 && tar tf "$file"|| 
            echo "ERROR: no tar program installed"
            ;;
        rar)
            type rar >/dev/null 2>&1 && rar v "$file"|| 
            echo "ERROR: no rar program installed"
            ;;
        zip)
            type zip >/dev/null 2>&1 && zip -sf "$file"|| 
            echo "ERROR: no zip program installed"
            ;;
        *)
            echo "Unknown extension: '$ext', skipping..."
            ;;
    esac
done

Simpan skrip itu di Anda PATHdan buat itu bisa dieksekusi. Anda kemudian dapat mencantumkan konten arsip apa pun:

$ list_archive.sh foo.rar foo.tar.bz foo.tar.gz foo.tbz foo.zip

-----
Archive 'foo.rar'
-----

RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
Trial version             Type RAR -? for help

Archive foo.rar

Pathname/Comment
                  Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 dir1/subdir1/file
                     0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
 dir1/file
                     0        8   0% 30-03-15 19:29 -rw-r--r-- 00000000 m3b 2.9
 dir1/subdir1
                     0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
 dir1
                     0        0   0% 30-03-15 19:29 drwxr-xr-x 00000000 m0  2.0
 dir2
                     0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
-------------------------------------------------------------------------------
    5                0       16   0%


-----
Archive 'foo.tar.bz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tar.gz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tbz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.zip'
-----
Archive contains:
  dir1/
  dir1/subdir1/
  dir1/subdir1/file
  dir1/file
  dir2/
Total 5 entries (0 bytes)

Dan karena seseorang menyebutkan bahwa editor yang lebih rendah, emacs juga dapat melakukan ini:

emacs menampilkan konten arsip

terdon
sumber
6

Mengapa tidak digunakan vimuntuk menelusuri arsip Anda dan membuka file (setidaknya file seperti teks):

vim archive.tar.gz

masukkan deskripsi gambar di sini

Tekan tombol panah untuk menggulir dan Entermembuka file.

Sylvain Pineau
sumber
4

Midnight Commander ( mc) juga memiliki penampil file terkompresi yang baik, meskipun saya menganggap ini sedikit curang karena mc adalah manajer file, meskipun berbasis teks.

Juga, jika yang Anda inginkan adalah melihat apa yang ada di dalam arsip terkompresi, Anda dapat mempelajari perintah "view" untuk setiap kompresor. tar tzvfakan menunjukkan kepada Anda konten file tar, unzip -lakan melakukannya untuk file zip, dan sebagainya.

roadmr
sumber
2

Menggunakan view filename.tar.gz juga akan berhasil. sama seperti vim, tetapi tanpa izin tulis.

Jeff
sumber
2

lesspipeadalah skrip shell yang diinstal secara default sebagai bagian dari lesspaket yang dapat mencantumkan isi tar.gzarsip, serta serangkaian format file arsip umum lainnya.

$ lesspipe example.tar.gz
drwxrwxr-x ubuntu/ubuntu     0 2018-11-16 05:32 example/
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ask.txt
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ubuntu.txt

Itu disebut oleh lessperintah ( lihat jawaban Oli ) sebagai preprocessor input jika $LESSOPENvariabel lingkungan diatur dengan tepat.

Jika merasa ingin bertualang, ambil puncaknya vi /usr/bin/lesspipeuntuk melihat perintah apa yang digunakan. Untuk file yang cocok dengan tar.gzekstensi, kita dapat melihat bahwa ia menggunakan di tar tzvfbawah tenda bersama dengan --force-localopsi untuk menonaktifkan fitur yang tidak jelas taryang jika tidak akan membingungkan titik dua dalam nama file dengan perintah untuk menggunakan tape drive jarak jauh:

*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
        tar tzvf "$1" --force-local

Perhatikan bahwa karena dirancang terutama sebagai preprosesor untuk less, itu tidak akan menghasilkan apa pun jika tidak mengenali tipe file. Saya perhatikan bahwa beberapa .tar.gzfile yang saya unduh tidak akan berfungsi karena mereka tidak benar-benar menggunakan kompresi gzip walaupun ada nama file.

anjsimmo
sumber
0

Jika Anda ingin melihat konten file tertentu dalam arsip tanpa mengekstraksi arsip atau menulis ke disk dengan cara apa pun, gunakan bendera -O (huruf kapital) untuk menulis ke stdout alih-alih file.

tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less

Pastikan O datang sebelum f atau ia akan mencoba mengurai O sebagai nama file.

Mobus Dorphin
sumber