ฉันจะดูเนื้อหาของไฟล์ tar.gz โดยไม่แตกไฟล์จาก command-line ได้อย่างไร


243

ฉันต้องการจะดูเนื้อหา (รายชื่อของไฟล์และโฟลเดอร์) ของเก็บตัวอย่างเช่น tar.gzไฟล์โดยไม่ต้องแยกมัน

มีวิธีใดบ้างในการทำเช่นนั้น?

คำตอบ:


261

เรียกใช้คำสั่งด้านล่างในเทอร์มินัลเพื่อดูเนื้อหาของไฟล์ tar.gz โดยไม่แตกไฟล์:

tar -tf filename.tar.gz

สกรีนช็อตของการแสดงรายการไฟล์ tarball ที่ถูกบีบอัดในเทอร์มินัล

-t, - แสดง
รายการเนื้อหาของไฟล์เก็บถาวร อาร์กิวเมนต์เป็นทางเลือก เมื่อได้รับพวกเขาระบุชื่อของสมาชิกที่จะแสดง


1
ทำตัวอย่างเหล่านี้ทั้งหมดเพื่อดูภายในไฟล์บีบอัดที่ทำงานในรูปแบบอื่น ๆ เช่นกัน เช่น zip, rar, tar เป็นต้น?
Ciasto piekarz

3
tar -tvf xxx.tgzสิ่งนี้จะแสดงคุณสมบัติโดยละเอียดของไฟล์
Eric Wang

4
ท่อไปที่treeเพื่อดูมุมมองต้นไม้tar -tf filename.tar.gz | tree
blockloop

สำหรับ zip / rar use unzip -l/unrar -l
pLumo

หากคุณต้องการที่จะแสดงรายการจนถึงระดับความลึก / ระดับเห็นเฉพาะที่นี่
holzkohlengrill

119

คุณยังสามารถใช้เป็นกลุ่ม

vim filename.tar.gz

8
นี่มันเจ๋งมาก. นอกจากนี้คุณยังสามารถดูเนื้อหาของไฟล์!
Nico

1
หรือใช้โปรแกรมแก้ไข ex +%p foo.tar.gzEx:
kenorb

@Nico คุณใช้วิธีนี้เพื่อดูเนื้อหาของไฟล์ภายใน tgz ได้อย่างไร
1252748

1
เมื่อคุณเปิดไฟล์ด้วย vim ( vim file.tar.gz) จะมีข้อความระบุว่า "เลือกไฟล์ที่มีเคอร์เซอร์แล้วกด ENTER" คุณทำเช่นนั้นเลื่อนเคอร์เซอร์ไปที่ไฟล์แล้วกด ENTER
นิโก้

2
ด้วยไฟล์เก็บถาวรขนาดใหญ่คุณเพียงแค่ต้องอดทน อาจนานมากในการโหลดโครงสร้างโฟลเดอร์ :-)
Hugo H

41

lessยังสามารถเปิดคลังข้อมูลที่gzบีบอัดและไม่บีบอัดtarได้ มันทำให้คุณมีls -lสไตล์ที่น่ารักเช่นกัน:

$ 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
...

และเนื่องจากlessคุณสามารถเลื่อนดูค้นหาและอื่น ๆ อย่างไรก็ตามมันล้มเหลวอย่างน่าสมเพชด้วยอัลกอริธึมการบีบอัดอื่น ๆ (จากประสบการณ์ของฉัน)


4
ไม่ได้ผลสำหรับฉัน แสดงเป็นไฟล์ไบนารี่
JeromeJ

2
คุณแน่ใจหรือว่าคุณไม่มีaliasตัวเลือกพิเศษสำหรับlessสิ่งที่คุณไม่ได้แสดงที่นี่? ฉันเพิ่งลองดู แต่ก็ไม่ได้ผล lessฉันไม่ได้มีการติดตั้งนามแฝงสำหรับ
code_dredd

36

zcatคุณสามารถใช้คำสั่งซี: zless, zgrep,

วิธีดูเนื้อหาไฟล์ใช้:

zcat file.gz   

วิธี grep ใช้:

zgrep test file.gz   

วิธีตรวจสอบความแตกต่างระหว่างไฟล์ใช้:

zdiff file1.gz file2.gz

นี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ มีอีกมากมาย


9

tar's -tธงจะแสดงรายการเนื้อหาสำหรับคุณ เพิ่มลงในแฟล็กอื่นของคุณ (ดังนั้น-tvfzสำหรับ a tar.gz, -tvfja tar.bz2, ฯลฯ ) และคุณสามารถเรียกดูได้โดยไม่ต้องแตกไฟล์ จากตรงนั้นคุณสามารถแตกไฟล์เดียวได้อย่างง่ายดาย

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

ปัญหาใหญ่ที่มีtarอยู่ในความทรงจำทั้งหมดธงอื่นดังนั้นฉันมักจะพึ่งพา7z(ของp7zip-fullแพคเกจ) เพื่อทำจดหมายเหตุทั้งหมดของฉัน ฉันจะไม่อ้างว่ามันดีกว่าทั้งหมด แต่รองรับเกือบทุกอย่าง (โดยไม่ต้องระบุประเภทการบีบอัด) และอาร์กิวเมนต์เป็นตรรกะ

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

แน่นอนว่ามันมีความสามารถน้อยกว่า แต่คุณไม่จำเป็นต้องใช้ man page เพื่อใช้งาน

นอกจากนี้ยังมี Midnight Commander ( mc) นี่เป็นสิ่งที่รอบด้านสำหรับการจัดการไฟล์เทอร์มินัลแบบเสมือนกราฟิกและด้วยการทดสอบแสงบางอย่างเพียงแค่ให้คุณเรียกดูทั้งสอง.tar.gzและ.7zเก็บถาวร ฉันไม่แน่ใจว่ารองรับกี่คน


t-ar เคยเป็นและชื่อจริง ๆ แล้วเป็นที่เก็บเทปที่ร้องลำดับและในหลาย ๆ กรณีเป็น PIA โดยเฉพาะอย่างยิ่งเมื่อ tar + gz ที่หลีกเลี่ยงไม่ได้นี่เป็นเพียงความโหดร้าย ย้ายไปที่ 7zip ทันที
Frank Nocke

9

นั่นขึ้นอยู่กับไฟล์ โปรแกรมบีบอัดส่วนใหญ่มีการตั้งค่าสถานะซึ่งแสดงรายการเนื้อหาของไฟล์เก็บถาวร

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbzไฟล์

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip ไฟล์

    $ 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 ไฟล์

    $ 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 ไฟล์

     $ 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%
    

นั่นคือรูปแบบการเก็บถาวรที่เป็นที่นิยมที่สุด เมื่อคำนึงถึงสิ่งนี้คุณสามารถเขียนสคริปต์เล็กน้อยที่ใช้คำสั่งที่เหมาะสมโดยขึ้นอยู่กับนามสกุลของไฟล์ที่คุณให้:

#!/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

บันทึกสคริปต์นั้นลงในของคุณPATHและทำให้สามารถเรียกใช้งานได้ จากนั้นคุณสามารถแสดงรายการเนื้อหาของไฟล์เก็บถาวรใด ๆ :

$ 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)

และเนื่องจากมีคนพูดถึงตัวแก้ไขน้อยกว่าโดยธรรมชาติแล้ว emacs ก็สามารถทำได้เช่นกัน:

emacs แสดงเนื้อหาของไฟล์เก็บถาวร


6

ทำไมไม่ใช้vimเพื่อเรียกดูไฟล์เก็บถาวรและไฟล์เปิดของคุณ (อย่างน้อยไฟล์ที่มีลักษณะคล้ายข้อความ):

vim archive.tar.gz

ป้อนคำอธิบายรูปภาพที่นี่

กดปุ่มลูกศรเพื่อเลื่อนและEnterเพื่อเปิดไฟล์


4

Midnight Commander ( mc) ยังมีโปรแกรมดูไฟล์บีบอัดที่ดีแม้ว่าฉันคิดว่านี่เป็นการโกงเล็กน้อยเนื่องจาก mc เป็นตัวจัดการไฟล์แม้ว่าจะเป็นข้อความก็ตาม

นอกจากนี้หากสิ่งที่คุณต้องการคือการดูว่ามีอะไรอยู่ในคลังเก็บบีบอัดคุณสามารถเรียนรู้คำสั่ง "ดู" สำหรับแต่ละคอมเพรสเซอร์ tar tzvfจะแสดงเนื้อหาของไฟล์ tar unzip -lจะแสดงเป็นไฟล์ zip และอื่น ๆ


2

view filename.tar.gz จะใช้ งานได้ มากในวิธีเดียวกันเป็นกลุ่ม แต่ไม่มีสิทธิ์เขียน


2

lesspipeเป็นเชลล์สคริปต์ที่ติดตั้งตามค่าเริ่มต้นซึ่งเป็นส่วนหนึ่งของlessแพ็คเกจที่สามารถแสดงรายการเนื้อหาของtar.gzไฟล์เก็บถาวรรวมถึงช่วงของรูปแบบไฟล์เก็บถาวรทั่วไปอื่น ๆ

$ 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

มันถูกเรียกโดยlessคำสั่ง ( ดูคำตอบของ Oli ) เป็นตัวประมวลผลล่วงหน้าอินพุตหาก$LESSOPENตัวแปรสภาพแวดล้อมถูกตั้งค่าอย่างเหมาะสม

หากรู้สึกถึงการผจญภัยลองจุดสูงสุดvi /usr/bin/lesspipeเพื่อดูว่าคำสั่งนั้นใช้อะไร สำหรับไฟล์ที่ตรงกับtar.gzส่วนขยายเราจะเห็นว่ามันใช้tar tzvfภายใต้ประทุนพร้อมกับ--force-localตัวเลือกในการปิดการใช้งานคุณลักษณะที่ไม่ชัดเจนของtarสิ่งนั้นจะทำให้ลำไส้ใหญ่สับสนในชื่อไฟล์ด้วยคำสั่งเพื่อใช้เทปไดร์ฟระยะไกล:

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

โปรดทราบว่าเนื่องจากส่วนใหญ่ได้รับการออกแบบมาเป็นตัวประมวลผลล่วงหน้าสำหรับlessมันจะไม่ส่งออกอะไรถ้ามันไม่รู้จักชนิดของไฟล์ ฉันสังเกตว่า.tar.gzไฟล์บางไฟล์ที่ฉันดาวน์โหลดไม่ทำงานเพราะพวกเขาไม่ได้ใช้การบีบอัด gzip แม้จะเป็นชื่อไฟล์ก็ตาม


0

หากคุณต้องการดูเนื้อหาของไฟล์เฉพาะภายในไฟล์เก็บถาวรโดยไม่แตกไฟล์เก็บถาวรหรือเขียนลงดิสก์ไม่ว่าด้วยวิธีใดให้ใช้แฟล็ก -O (capital o) เพื่อเขียนไปยัง stdout แทนไฟล์

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

ตรวจสอบให้แน่ใจ O มาก่อน f หรือจะพยายามแยก O เป็นชื่อไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.