Làm cách nào tôi có thể xem nội dung của tệp tar.gz mà không cần trích xuất từ ​​dòng lệnh?


246

Tôi muốn xem nội dung (danh sách các tệp và thư mục) của một kho lưu trữ, ví dụ như một tar.gztệp mà không giải nén nó.

Có phương pháp nào để làm điều đó không?

Câu trả lời:


265

Chạy lệnh dưới đây trong thiết bị đầu cuối để xem nội dung của tệp tar.gz mà không giải nén nó:

tar -tf filename.tar.gz

ảnh chụp màn hình liệt kê các tập tin tarball nén trong thiết bị đầu cuối

-t, --list
Liệt kê nội dung của kho lưu trữ. Đối số là tùy chọn. Khi được đưa ra, họ chỉ định tên của các thành viên để liệt kê.


1
tất cả các ví dụ này để xem bên trong tệp nén cũng hoạt động trên các loại định dạng khác. như zip, rar, tar, vv?
Ciasto piekarz

3
tar -tvf xxx.tgzđiều này cũng sẽ hiển thị các thuộc tính chi tiết của các tập tin.
Eric Wang

4
dẫn nó để treexem chế độ xem câytar -tf filename.tar.gz | tree
blockloop

Để sử dụng zip / rar unzip -l/unrar -l
pLumo

Nếu bạn muốn liệt kê cho đến khi một độ sâu / cấp độ cụ thể chỉ xem ở đây .
holzkohlengrill

120

Bạn cũng có thể sử dụng vim

vim filename.tar.gz

9
Điều này thật tuyệt. Bạn cũng có thể xem nội dung của các tập tin!
Nico

1
Hoặc sử dụng trình soạn thảo Ex : ex +%p foo.tar.gz.
kenorb

@Nico Làm thế nào để bạn sử dụng điều này để xem nội dung của một tập tin trong tgz?
1252748

1
Khi bạn mở de file bằng vim ( vim file.tar.gz), nó báo "Chọn một tệp bằng con trỏ và nhấn ENTER". Bạn làm điều đó, di chuyển con trỏ qua một tệp và nhấn ENTER.
Nico

2
Với kho lưu trữ khổng lồ, bạn chỉ cần kiên nhẫn. Nó có thể rất dài để tải cấu trúc thư mục. :-)
Hugo H

41

lesscũng có thể lưu trữ mở gznén và không nén tar. Nó cũng cung cấp cho bạn một ls -lkiểu dáng đáng yêu :

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

Và bởi vì nó less, bạn có thể cuộn qua nó, tìm kiếm nó, v.v. Tuy nhiên, nó thất bại thảm hại với các thuật toán nén khác (theo kinh nghiệm của tôi).


4
Không làm việc cho tôi. Hiển thị dưới dạng tệp nhị phân.
JeromeJ

2
Bạn có chắc chắn rằng bạn không có aliastùy chọn đặc biệt nào cho lessviệc bạn không hiển thị ở đây không? Tôi chỉ thử để xem, nhưng nó không hoạt động. Tôi không có bất kỳ thiết lập bí danh cho less.
code_dredd

37

Bạn có thể sử dụng lệnh z: zcat, zless, zgrep.

Để xem nội dung tập tin, hãy sử dụng:

zcat file.gz   

Để grep một cái gì đó sử dụng:

zgrep test file.gz   

Để kiểm tra sự khác biệt giữa các tập tin sử dụng:

zdiff file1.gz file2.gz

Đây chỉ là một vài ví dụ, có nhiều hơn nữa.


9

tar's -tcờ sẽ liệt kê nội dung cho bạn. Thêm nó vào các cờ khác của bạn (vì vậy -tvfzcho a tar.gz, -tvfjcho a tar.bz2, v.v.) và bạn có thể duyệt mà không cần giải nén. Từ đó bạn có thể trích xuất các tập tin đơn lẻ khá dễ dàng

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

Các vấn đề lớn với tarđược ghi nhớ tất cả các lá cờ khác . Vì vậy, tôi thường dựa vào 7z(của p7zip-fullgói) để làm tất cả lưu trữ của tôi. Tôi sẽ không khẳng định nó hoàn toàn tốt hơn nhưng nó hỗ trợ hầu hết mọi thứ (không phải chỉ định loại nén) và các đối số là hợp lý.

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

Nó chắc chắn ít khả năng hơn, nhưng bạn không cần trang man để sử dụng nó.

Ngoài ra còn có Midnight Commander ( mc). Đây là một badass xung quanh để quản lý tập tin dựa trên thiết bị đầu cuối đồ họa và với một số thử nghiệm ánh sáng, nó chỉ cho phép bạn duyệt vào cả hai .tar.gz.7zlưu trữ. Tôi không chắc có bao nhiêu người khác hỗ trợ.


T-ar đã từng là và cái tên thực sự là viết tắt của băng lưu trữ băng , nó hét lên liên tiếp và trong nhiều trường hợp là PIA. Đặc biệt là đôi tar + gz không thể tránh khỏi, điều này chỉ là tàn nhẫn. Cũng chuyển sang 7zip ngay bây giờ.
Frank Nocke

9

Vâng, điều đó phụ thuộc vào các tập tin. Hầu hết (các) chương trình nén có một cờ liệt kê nội dung của kho lưu trữ.

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbztập tin

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip các tập tin

    $ 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 các tập tin

    $ 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 các tập tin

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

Đó là hầu hết các định dạng lưu trữ phổ biến hơn. Với tất cả những điều này, bạn có thể viết một đoạn script nhỏ sử dụng lệnh thích hợp tùy thuộc vào phần mở rộng của tệp bạn cung cấp cho nó:

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

Lưu tập lệnh đó trong của bạn PATHvà làm cho nó thực thi được. Sau đó, bạn có thể liệt kê nội dung của bất kỳ kho lưu trữ nào:

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

Và vì ai đó đã đề cập rằng trình soạn thảo ít hơn, một cách tự nhiên, emacs cũng có thể làm điều này:

emacs hiển thị nội dung của một kho lưu trữ


6

Tại sao không sử dụng vimđể duyệt tệp lưu trữ của bạn và mở tệp (ít nhất là tệp giống văn bản):

vim archive.tar.gz

nhập mô tả hình ảnh ở đây

Nhấn các phím mũi tên để cuộn và Enterđể mở tệp.


4

Midnight Commander ( mc) cũng có trình xem tệp nén tốt, mặc dù tôi cho rằng điều này hơi gian lận vì mc trình quản lý tệp, mặc dù là trình duyệt dựa trên văn bản.

Ngoài ra, nếu tất cả những gì bạn muốn là xem những gì bên trong kho lưu trữ nén, bạn có thể tìm hiểu lệnh "xem" cho mỗi máy nén. tar tzvfsẽ hiển thị cho bạn nội dung của tệp tar, unzip -lsẽ thực hiện cho tệp zip, v.v.


2

Sử dụng view filename.tar.gz cũng sẽ làm việc. vim giống như cách mà vim làm, nhưng không có quyền ghi.


2

lesspipelà một tập lệnh shell được cài đặt theo mặc định như một phần của lessgói có thể liệt kê nội dung của tar.gzkho lưu trữ, cũng như một loạt các định dạng tệp lưu trữ phổ biến khác.

$ 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

Nó được gọi bởi lesslệnh ( xem câu trả lời của Oli ) như một bộ tiền xử lý đầu vào nếu $LESSOPENbiến môi trường được đặt một cách thích hợp.

Nếu cảm thấy phiêu lưu, hãy lên đỉnh vi /usr/bin/lesspipeđể xem nó sử dụng lệnh gì. Đối với các tệp khớp với tar.gzphần mở rộng, chúng ta có thể thấy rằng nó sử dụng tar tzvfdưới mui xe cùng với --force-localtùy chọn vô hiệu hóa một tính năng tối nghĩa của tarđiều đó sẽ gây nhầm lẫn các dấu hai chấm trong tên tệp với lệnh sử dụng ổ băng từ xa:

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

Lưu ý rằng vì nó chủ yếu được thiết kế như một bộ xử lý trước less, nên nó sẽ không xuất ra bất cứ thứ gì nếu nó không nhận ra loại tệp. Tôi nhận thấy rằng một số .tar.gzfile tôi tải về sẽ không làm việc vì họ không thực sự sử dụng nén gzip mặc dù tên tập tin.


0

Nếu bạn muốn xem nội dung của một tệp cụ thể trong kho lưu trữ mà không trích xuất tệp lưu trữ hoặc ghi vào đĩa theo bất kỳ cách nào, hãy sử dụng cờ -O (viết hoa o) để ghi vào thiết bị xuất chuẩn thay vì tệp.

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

Hãy chắc chắn rằng O xuất hiện trước f hoặc nó sẽ cố phân tích O thành tên tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.