it-swarm-vi.com

Thêm / cập nhật tệp vào kho lưu trữ tar.gz hiện có?

Có cách nào để thêm/cập nhật tệp trong kho lưu trữ tar.gz không? Về cơ bản, tôi có một kho lưu trữ chứa một tệp tại /data/data/com.myapp.backup/./files/settings.txt và tôi muốn kéo tập tin đó từ kho lưu trữ (đã hoàn thành) và đẩy nó trở lại vào kho lưu trữ sau khi chỉnh sửa xong. Làm thế nào tôi có thể thực hiện điều này? Có vấn đề gì vì . trong đường dẫn?

78
Naftuli Kay

Định dạng tệp tar chỉ là một chuỗi các tệp được nối với nhau bằng một vài tiêu đề. Đây không phải là một công việc quá phức tạp để tách nó ra, đặt nội dung của bạn vào và đặt nó lại với nhau. Điều đó đang được nói, Jander mô tả làm thế nào tar như một chương trình không có các chức năng tiện ích để làm điều này và có thêm các biến chứng khi nén, phải có cả trước và sau khi thực hiện thay đổi.

Tuy nhiên, có những công cụ cho công việc! Có ít nhất hai hệ thống ngoài đó sẽ cho phép bạn thực hiện việc gắn kết vòng lặp của kho lưu trữ tar được nén vào một thư mục, sau đó thực hiện các thay đổi của bạn trong hệ thống tệp. Khi bạn đã hoàn tất, ngắt kết nối thư mục và kho lưu trữ nén của bạn đã sẵn sàng để cuộn.

Tùy chọn đầu tiên sẽ là archivemount dự án cho Fuse . Đây là một hướng dẫn về điều đó . Hệ thống của bạn có thể đã có Fuse và nếu nó không phân phối thì bạn nên có tùy chọn cho nó.

Tùy chọn khác là tarfs . Đó là sử dụng đơn giản hơn , nhưng tôi đã nghe nói rằng nó có một số rắc rối với việc lưu trữ bzip2 bị hỏng nên trước tiên bạn có thể kiểm tra điều đó khá kỹ lưỡng.

18
Caleb

Để lấy tệp của bạn khỏi kho lưu trữ của bạn, bạn có thể sử dụng tar xzf archive.tar.gz my/path/to/file.txt. Lưu ý rằng các thư mục trong đường dẫn của tệp cũng sẽ được tạo. Sử dụng tar t (I E. tar tzf archive.tar.gz) để liệt kê các tệp trong kho lưu trữ.

tar không hỗ trợ cập nhật tệp "tại chỗ". Tuy nhiên, bạn có thể thêm tệp vào cuối kho lưu trữ, ngay cả khi chúng có cùng đường dẫn với tệp đã có trong kho lưu trữ. Trong trường hợp đó, cả hai bản sao của tệp sẽ nằm trong kho lưu trữ và tệp được thêm vào sau sẽ ghi đè lên bản trước đó. Lệnh sử dụng cho việc này là tar r (hoặc là tar u chỉ thêm các tệp mới hơn tệp lưu trữ) là lệnh sử dụng. Các . trong đường dẫn không phải là một vấn đề.

Tuy nhiên, có một nhược điểm: bạn không thể thêm vào kho lưu trữ nén. Vì vậy, bạn sẽ phải làm:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

Đó có lẽ không phải là những gì bạn muốn nghe, vì nó có nghĩa là viết lại toàn bộ kho lưu trữ hai lần. Nếu nó không phải là một kho lưu trữ quá lớn, tốt hơn là nên gỡ bỏ toàn bộ và sau đó chỉnh sửa lại sau khi chỉnh sửa. Thay phiên, bạn có thể sử dụng một kho lưu trữ không nén.

48
Jander

Tar ban đầu được sử dụng để ghi băng, vì vậy các tập tin "thay thế" không thực sự có trong thiết kế. Tuy nhiên, bạn có thể sử dụng --delete để xóa tệp khỏi tar gốc và sau đó -u để cập nhật tar và thêm lại tệp. Nó có thể mất một chút, vì tar cần tổ chức lại kho lưu trữ trong nội bộ.

9
rleibman