Giải nén kết quả trong một tệp, không phải là một thư mục


0

Tôi đã nén 6 tệp (tổng kích thước = 2gb) bằng cách sử dụng gzip -c myfiles_* > ~/myzip.gzip trên máy chủ A và nhờ bạn tôi sao chép máy chủ này sang máy chủ B. Bây giờ tôi đã biết rằng tệp được cho là có tên .gz vì vậy tôi đã đổi tên tập tin bằng cách sử dụng mv. Tôi đã kiểm tra rằng tệp trên máy chủ B có cùng kích thước với bản gốc .gzip tập tin trên máy chủ A, mà nó đã làm. Sau đó tôi chạy gunzip myzip.gz.

Kết quả không phải là một thư mục chứa các tệp của tôi, mà là một tệp có tên myfiles không có bất kỳ sự mở rộng nào Kích thước của tệp có cùng kích thước với các tệp ban đầu, vì vậy tất cả các tệp đã được biên dịch thành tệp duy nhất này. Làm thế nào để bây giờ tôi giải nén các tập tin từ tập tin duy nhất này?

Như bạn có thể nói tôi vẫn còn rất mới với Linux.

Câu trả lời:


1

Tôi đã nén 6 tệp (tổng kích thước = 2gb) bằng cách sử dụng gzip -c myfiles_* > ~/myzip.gzip và nhờ bạn tôi sao chép máy chủ này sang máy chủ khác.   Bây giờ tôi đã biết rằng kho lưu trữ được cho là được đặt tên .gz vì vậy tôi   đổi tên tập tin bằng cách sử dụng mv. Sau đó tôi chạy gunzip myzip.gz.

Kết quả bạn đang thấy là chính xác những gì bạn tạo ra. GZip không giữ lại bất kỳ cấu trúc thư mục nào khi nén; nó chỉ nén các tập tin / dữ liệu. Vì vậy, khi bạn chạy lệnh này:

gzip -c myfiles_* > ~/myzip.gzip

Tất cả GZip đã làm là ghép tất cả các tệp mà nó tìm thấy với myfiles_* vào một đốm lớn và nén chúng vào ~/myzip.gzip. Thực tế là phần mở rộng tập tin không chính xác là không liên quan vì chỉ cần đổi tên tập tin đó như bạn đã làm, đó sẽ giải quyết vấn đề nhưng kho lưu trữ bên dưới vẫn chỉ là một tập tin lớn.

Còn về cách phục hồi bây giờ? Khá tự tin bạn không thể bởi vì vấn đề nằm ở logic GZip ban đầu của bạn. Đề xuất duy nhất tôi có cho bạn bây giờ là bắt đầu quay lại hình vuông và tạo một kho lưu trữ TAR / GZipped như thế này.

Tạo tệp TAR / GZipped.

Đầu tiên, chạy lệnh TAR này:

tar -cf myzip.tar myfiles_*

Điều đó sẽ tạo ra một kho lưu trữ TAR mới có tên myzip.tar bao gồm các tệp mà hệ thống tìm thấy bằng cách sử dụng mẫu, myfiles_*.

Bây giờ với điều đó, bạn có thể GZip lưu trữ TAR như thế này:

gzip myzip.tar

Đây là quá trình xử lý công cụ này của tôi trong Mac OS X, nhưng nếu bạn đang sử dụng phiên bản GNU của TAR, mà hầu hết các hệ thống Linux sử dụng thì bạn có thể chạy lệnh này để kết hợp cả hai bước thành một:

tar -cfz myzip.tar.gz

Lưu ý rằng thêm z trong các tùy chọn? Điều đó nói với TAR cho GZip lưu trữ khi tạo nó.

Giải nén và hủy lưu trữ tệp TAR / GZipped.

Khi đã xong, bạn sẽ có một kho lưu trữ mới được đặt tên myzip.tar.gz. Chuyển bất cứ nơi nào bạn cần đến và sau đó giải nén nó bằng lệnh TAR như thế này:

tar -xf myzip.tar.gz

TAR đủ thông minh hiện nay để phát hiện nén GZip như là một phần của quy trình hủy lưu trữ của nó, do đó, nó sẽ giải nén tệp lưu trữ TAR và sau đó trích xuất nội dung của kho lưu trữ TAR đó để khớp chính xác với cấu trúc tệp và thư mục của bất kỳ nguồn nào bắt đầu với.


Cảm ơn đã phản ứng nhanh chóng! Tệp mới không có phần mở rộng và tôi khá chắc chắn rằng tệp được sao chép đơn giản bằng cách sử dụng scp lệnh tôi gửi cho anh ta, chỉ chứa hai con đường.
pir

@felbo Xin lỗi. Tôi đọc sai toàn bộ câu hỏi của bạn. Vui lòng kiểm tra chỉnh sửa mới nhất của tôi cho câu trả lời mà về cơ bản là viết lại toàn bộ câu trả lời. Khá tự tin rằng bạn sẽ không thể trích xuất các tệp riêng lẻ từ tệp GZip mà bạn hiện có, nhưng tôi giải thích cách bạn có thể tạo một kho lưu trữ GZipped giữ lại cấu trúc thư mục bằng cách sử dụng TAR.
JakeGould

Tôi ghét Linux một số lần .. Có vẻ như không còn cách nào khác, cảm ơn.
pir
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.