Làm cách nào để cập nhật tệp tar.gz?


Câu trả lời:


28

Bạn thường sử dụng cờ -u cho việc này. Từ trang người đàn ông của tar:

 -u, --update
       only append files newer than copy in archive

vì vậy trình tự này sẽ làm những gì bạn cần:

# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar

Để có cái nhìn chi tiết hơn một chút, xem tại đây: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html


2
OP đã hỏi về việc cập nhật kho lưu trữ nén không thể cập nhật.
QkiZ

18

Giải pháp / cách giải quyết

Bạn không thể cập nhật kho lưu trữ TAR nén ( .tar.gz ) trong một bước. Nhưng, nếu bạn có đủ không gian trống, bạn có thể làm điều này:

  1. Trích xuất tệp .tar từ tệp .tar.gz :

    gunzip filename.tar.gz

  2. Cập nhật tệp .tar không nén bằng tar -ulệnh:

    tar -uf filename.tar new_file

  3. Nén tệp .tar đã cập nhật :

    gzip filename.tar

Tăng tôc

Nếu bạn có CPU đa lõi, tôi khuyên bạn nên sử dụng pigzthay vì gziptrích xuất và tạo tệp .gz . ( pigzlà một triển khai đa luồng của gzip)

Chỉ cần thay thế gzip/ gunziplệnh thành pigz/ unpigz.

Hướng dẫn liên quan


5

Nếu bạn muốn cập nhật một tập tin cụ thể trong *.tar.gztập tin, chỉ cần làm như sau:

Nhập vitừ nơi tartập tin có sẵn

/home>vi

Ví dụ: nếu bạn muốn sửa đổi Simple.tar.gz trong /home/test/thư mục:

/home/test>vi

Và trong trình chỉnh sửa trống, nhập :n simple.tar.gzvà nhấn, Enter bạn sẽ nhận được danh sách các thư mục và tệp di chuyển con trỏ đến nơi bạn muốn sửa đổi và nhấp vào Enter. Nó sẽ hiển thị vitrình soạn thảo của tập tin cụ thể. Sau đó itùy chọn để thay đổi tập tin. Sau khi thay đổi thành công. Nhấn Escphím và chọn :wqđể viết và thoát tệp. Sau đó sử dụng :qđể đi ra khỏi danh sách tập tin.


1

Nếu bạn định làm điều này nhiều lần, tối ưu hóa có thể là:

if [[ -f my.tar.gz ]]; then
    if [[ ! -f my.tar ]]; then
        echo 'No tar, unzipping tar.gz'
        gunzip my.tar.gz
    fi
    tar -uvf my.tar file1 file2 file_new
    gzip -fk my.tar  # This keeps a copy of the tar.
    # -f --force overwrite existing .tar.gz
    # -k --keep Keep the input file (.tar file)
else
    tar -cvzf my.tar.gz file1 file2
fi
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.