Điểm:1

GNU tar - cập nhật tệp tar, ghi đè lên tệp gốc trong dòng lệnh (có thể thực hiện bằng cách kéo và thả trong Trình quản lý lưu trữ)

lá cờ cn

Tôi muốn cập nhật tệp tar với một phần nội dung được sửa đổi, bằng cách ghi đè lên tệp gốc, trong tập lệnh.

tôi đã thử tar -u, -MỘT-r, nhưng không ai làm những gì tôi muốn. Tôi cũng đã thử với --ghi đè.

Một bài kiểm tra dễ dàng:

đĩa ~
kiểm tra mkdir
tiếng vang foo > test1.txt
mkdir test_dir
cd test_dir
thanh tiếng vang > test2.txt
đĩa CD ../..
tar cvf test.tar test
tar tvf test.tar # kiểm tra nội dung
tiếng vang barbarbar >> test/test_dir/test2.txt
tar rvf test.jar test # hoặc Avf hoặc uvf, nó giống nhau: tệp đã sửa đổi không ghi đè lên tệp gốc trong tar
  • -u --ghi đè về lý thuyết sẽ "cập nhật", nhưng thực tế nó chỉ nối thêm và không nối thêm tệp đã thay đổi, vì vậy tôi thấy có hai test1.txt và một test2.txt có trong tar, với test2.txt là người cũ
  • -A --ghi đè về mặt lý thuyết sẽ nối thêm, nhưng lỗi ra: tar: kiểm tra: Lỗi đọc ở byte 0, trong khi đọc 1024 byte: Là một thư mục tar: Lỗi không thể phục hồi: thoát ngay bây giờ
  • -r --ghi đè về mặt lý thuyết sẽ "chắp thêm", nhưng sẽ chỉ nối thêm và không ghi đè lên, vì vậy tôi thấy hai test1.txt và hai test2.txt trong hắc ín.

Tôi nghĩ: OK thì tar không bao gồm khả năng cập nhật tar tại chỗ. Nhưng sau đó tôi nhớ rằng điều này có thể đạt được dễ dàng bằng cách kéo thư mục mới vào tệp tar trong Gnome (tôi nghĩ rằng điều này được xử lý bởi "Trình quản lý lưu trữ"), vì vậy ít nhất là có thể.

Làm cách nào tôi có thể ghi đè lên các tệp trong tar trong dòng lệnh/tập lệnh?

SaveUkraine-StartPeaceTalk avatar
lá cờ cn
tài liệu liên quan: https://www.gnu.org/software/tar/manual/html_node/Dealing-with-Old-Files.html
SaveUkraine-StartPeaceTalk avatar
lá cờ cn
Liên quan: https://www.linuxquestions.org/questions/linux-newbie-8/how-to-overwrite-worthy-files-by-using-tar-command-remove-extra-files-4175489175/#post5087034
WesternGun avatar
lá cờ cn
Không, nó không giải quyết được vấn đề của tôi. Xin vui lòng, nếu bạn thực sự muốn giúp đỡ, hãy kiểm tra nó trước: `-u` trong liên kết đó sẽ thêm một tệp khác có cùng tên; mình xóa theo tên mà có 2 file trùng tên thì làm sao biết file mình xóa là file mình không muốn? Ý tôi là, có một lý do tại sao tôi hỏi ở đây, bởi vì tôi không thể tìm thấy bất cứ điều gì hoạt động bằng cách Google nó ở nơi khác.
lá cờ ru
Cả hai người đi giải nhiệt đi. Nhận xét về câu hỏi này hiện đã bị khóa trong tuần tới để ngăn hai bạn cãi nhau.
Điểm:2
lá cờ cn

bạn có thể tạo một tập lệnh tạo tarball khác thay vì cập nhật bản gốc rồi xóa bản gốc và đổi tên bản mới thành bản gốc...

cách mà ứng dụng "trình quản lý lưu trữ" có thể đang thực hiện việc này nâng cao hơn một chút và tôi sẽ không cố gắng mô phỏng hành vi đó trong bash, nhưng điều đó không có nghĩa là bạn không nên thử...

WesternGun avatar
lá cờ cn
Vâng, đây là thứ tôi muốn thử, cảm ơn. Tôi sẽ xóa tệp gốc khỏi tar và nối thêm tệp đã sửa đổi.
Điểm:0
lá cờ cn

Tôi tìm thấy đoạn này trong GNU hắc ín doc, vì vậy ghi đè không được hỗ trợ bởi hắc ín. Tôi sẽ xóa tệp gốc khỏi tar và nối thêm tệp đã sửa đổi.

https://www.gnu.org/software/tar/manual/html_node/how-to-update.html#how-to-update

4.2.3.1 Cách cập nhật kho lưu trữ bằng â--updateâ

Bạn phải sử dụng đối số tên tệp với thao tác â--updateâ (â-uâ). Nếu bạn không chỉ định bất kỳ tệp nào, tar sẽ không hành động trên bất kỳ tệp nào và sẽ không cho bạn biết rằng nó không làm gì cả (điều này có thể khiến bạn bối rối).

Để xem tùy chọn â--updateâ đang hoạt động, hãy tạo một tệp mới, âclassicalâ, trong thư mục thực hành của bạn và thêm một số văn bản vào tệp âbluesâ, sử dụng bất kỳ trình soạn thảo văn bản nào . Sau đó, gọi tar với thao tác âupdateâ và tùy chọn â--verboseâ (â-vâ) được chỉ định, sử dụng tên của tất cả các tệp trong thư mục âpracticeâ làm đối số tên tệp:

$ tar --update -v -f collection.tar blues nhạc rock dân gian cổ điển
nhạc blues
cổ điển
$

Bởi vì chúng tôi đã chỉ định chế độ dài dòng, tar in ra tên của các tệp mà nó đang làm việc, trong trường hợp này là tên của các tệp cần được cập nhật. Nếu bạn chạy âtar --listâ và xem kho lưu trữ, bạn sẽ thấy âbluesâ và âclassicalâ ở cuối. Sẽ có tổng cộng hai phiên bản của thành viên âbluesâ; cái ở cuối sẽ mới hơn và lớn hơn, vì bạn đã thêm văn bản trước khi cập nhật nó.

Lý do tar không ghi đè lên tệp cũ hơn khi cập nhật nó là ghi vào giữa một phần của băng là một quá trình khó khăn. Băng không được thiết kế để quay ngược. Xem phần Băng và phương tiện lưu trữ khác, để biết thêm thông tin về băng.

CHỈNH SỬA: --xóa bỏ không hoạt động/rất chậm. Có vẻ như việc xóa các tệp khỏi tar không khả thi lắm, có thể do thiết kế. Tôi nghĩ rằng tôi phải giải nén/xóa/đóng gói lại hoặc: https://unix.stackexchange.com/questions/68732/remove-files-from-tar-archive nhưng tôi chưa biết làm thế nào.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.