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?
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:
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

-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ê.
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.
treexem chế độ xem câytar -tf filename.tar.gz | tree
unzip -l/unrar -l
Bạn cũng có thể sử dụng vim
vim filename.tar.gz
ex +%p foo.tar.gz.
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.
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).
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.
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.gzvà .7zlưu trữ. Tôi không chắc có bao nhiêu người khác hỗ trợ.
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ữ.
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/
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)
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
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:

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ấn các phím mũi tên để cuộn và Enterđể mở tệp.
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 là 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.
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.
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.