Câu trả lời:
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
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:
Trích xuất tệp .tar từ tệp .tar.gz :
gunzip filename.tar.gz
Cập nhật tệp .tar không nén bằng tar -u
lệnh:
tar -uf filename.tar new_file
Nén tệp .tar đã cập nhật :
gzip filename.tar
Nếu bạn có CPU đa lõi, tôi khuyên bạn nên sử dụng pigz
thay vì gzip
trích xuất và tạo tệp .gz . ( pigz
là một triển khai đa luồng của gzip
)
Chỉ cần thay thế gzip
/ gunzip
lệnh thành pigz
/ unpigz
.
Nếu bạn muốn cập nhật một tập tin cụ thể trong *.tar.gz
tập tin, chỉ cần làm như sau:
Nhập vi
từ nơi tar
tậ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.gz
và 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ị vi
trình soạn thảo của tập tin cụ thể. Sau đó i
tù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.
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