Liệu tar -tvf giải nén tập tin hay chỉ liệt kê tên?


9

Tôi có một tar.gztệp 32 GB. Tôi đã cố gắng trích xuất các thư mục cụ thể từ nó để tôi liệt kê các nội dung bằng lệnh sau để xem cấu trúc tệp:

tar -tvf file.tar.gz > files.txt

Nó dường như được dùng mãi mãi để liệt kê tất cả các tập tin. Câu hỏi của tôi là cờ -t có giải nén các tập tin không? Tôi biết nó không giải nén trên đĩa nhưng lượng thời gian sử dụng khiến tôi tự hỏi liệu nó có thực sự xử lý chúng trong một loại bộ đệm nào đó không.



3
@smci: Nó tự động được phát hiện, vì vậy không thực sự bị lãng quên.
Ry-

Câu trả lời:


14

Các tập tin tar.gz không có chỉ mục. Không giống như zip hoặc các định dạng lưu trữ khác, nó không tầm thường cũng không rẻ để có được danh sách các tệp chứa hoặc siêu dữ liệu khác. Để hiển thị cho bạn tệp nào được chứa trong kho lưu trữ, tar thực sự cần giải nén tệp lưu trữ và giải nén tệp, mặc dù trong trường hợp -ttùy chọn, nó chỉ làm như vậy trong bộ nhớ.

Nếu một mẫu phổ biến trong trường hợp sử dụng của bạn là liệt kê các tệp được chứa trong kho lưu trữ, bạn có thể muốn xem xét sử dụng định dạng lưu trữ có thể thêm chỉ mục tệp vào tệp nén, ví dụ: zip.

Có lẽ bạn cũng muốn xem định dạng HDF5 cho các tình huống phức tạp hơn.

Đo

Tôi chỉ cần thực hiện một số phép đo để chứng minh câu trả lời của mình và tạo ra một số thư mục có nhiều tệp trong đó và đóng gói cả hai, tar czf files#.tgz files#zip -r files#.zip files#.

Đối với các bài kiểm tra, tôi đã chạy lệnh giải nén hai lần mỗi lần và lấy kết quả của lần chạy thứ hai, để cố gắng tránh đo tốc độ đĩa.

Kiểm tra 1

Thư mục files1chứa 100.000 tệp trống .

$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null  0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null  0,30s user 0,34s system 99% cpu 0,649 total

zip ở đây chậm hơn.

Kiểm tra 2

Thư mục files2chứa 5.000 tệp với 512 byte dữ liệu ngẫu nhiên mỗi tệp .

$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null  0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null  0,03s user 0,06s system 98% cpu 0,092 total

Vẫn không thuyết phục, nhưng lần này zip nhanh hơn.

Bài kiểm tra 3

Thư mục files3chứa 5.000 tệp với 5kB dữ liệu ngẫu nhiên mỗi tệp .

$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null  0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null  0,03s user 0,06s system 99% cpu 0,093 total

Trong thử nghiệm này có thể thấy rằng các tệp càng lớn thì càng khó để tar liệt kê chúng.

Phần kết luận

Đối với tôi, có vẻ như zip giới thiệu một chút chi phí mà bạn sẽ chỉ chú ý với nhiều tệp rất nhỏ (gần như trống), trong khi đối với số lượng lớn tệp lớn hơn, nó sẽ thắng cuộc thi khi liệt kê các tệp có trong kho lưu trữ.

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.