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.gz
tệ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.gz
tệ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.
tree
xem 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.
less
cũng có thể lưu trữ mở gz
nén và không nén tar
. Nó cũng cung cấp cho bạn một ls -l
kiể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).
alias
tùy chọn đặc biệt nào cho less
việ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 -t
cờ 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 -tvfz
cho a tar.gz
, -tvfj
cho 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-full
gó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
và .7z
lư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
/ tbz
tậ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 PATH
và 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 tzvf
sẽ hiển thị cho bạn nội dung của tệp tar, unzip -l
sẽ thực hiện cho tệp zip, v.v.
lesspipe
là một tập lệnh shell được cài đặt theo mặc định như một phần của less
gói có thể liệt kê nội dung của tar.gz
kho 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 less
lệnh ( xem câu trả lời của Oli ) như một bộ tiền xử lý đầu vào nếu $LESSOPEN
biế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.gz
phần mở rộng, chúng ta có thể thấy rằng nó sử dụng tar tzvf
dưới mui xe cùng với --force-local
tù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.gz
file 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.