Làm thế nào để tôi tiếp tục một lệnh tar đã bị giết


11

Tôi đã làm một: tar -cvfvà tôi đã phải giết nó với ctrl-C. Tôi biết tôi nên đã thực hiện một Ctrl-Zvà sau đó đưa nhiệm vụ trở lại tiền cảnh ... nhưng đó không phải là câu chuyện.

Tôi có thể tiếp tục từ điểm tôi đã dừng nhiệm vụ không?


Có một tập tin tar không đầy đủ ở vị trí đích?
Karthik T

Có một tar không đầy đủ.
mthpvg

Câu trả lời:


11

Phương pháp này sẽ tạo lại kho lưu trữ tar của bạn và nối phần hoàn thành vào tệp hiện có. Điều này có thể hữu ích nếu sao lưu qua kết nối mạng. Bạn có thể sẽ dẫn đến một kho lưu trữ bị hỏng nếu bất kỳ dữ liệu nào trong INFILES của bạn đã thay đổi. Hãy chắc chắn để kiểm tra kho lưu trữ của bạn sau khi hoàn thành.

Thay đổi INFILES và OUTFILE thành tên chính xác trên dòng sau.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

Giải trình:

SIZE="$(wc -c < $OUTFILE)" # Lấy kích thước hiện tại của kho lưu trữ.

tar -cz --to-stdout "$INFILES" |# Bắt đầu tạo lưu trữ và gửi đầu ra cho taillệnh.

tail -c +$(($SIZE+1)) >> # Bỏ qua dữ liệu trước $ SIZE + 1 và tiếp tục phần còn lại của kho lưu trữ $ OUTFILE.


2
Tôi cho rằng điều này nhanh hơn là chỉ khởi động lại quá trình tar vì nó không thực sự ghi bất cứ điều gì vào đĩa?
Tyler

2

Giải pháp tốt nhất là xóa tệp tar và khởi động lại quá trình được chuẩn bị trước nohupvà nối thêm &. Ngoài ra, bạn có thể chạy tar -tfvvà sử dụng như là một loại trừ cho cái mới tar -cvf.


2
tar -cvfsẽ ghi đè lên tập tin hiện có. Ý bạn là tar -rvfsao Ngoài ra, tập tin cuối cùng được ghi vào kho lưu trữ có thể không đầy đủ.
Gilles 'SO- ngừng trở thành ác quỷ'

Vì vậy, ý tưởng là tạo một danh sách các tệp đã có trong tarball, trừ đi cái cuối cùng có lẽ không đầy đủ. Rồi chạy a tar -rvf?
mthpvg

2

Bạn không thể; bạn chỉ cần bắt đầu lại.


0

Những gì tôi làm trong trường hợp, rằng tôi có một tarkho lưu trữ không đầy đủ , tôi tạo một danh sách các tệp trong kho lưu trữ:

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

Các sedlệnh xóa tất cả những dòng này, có một dấu gạch chéo: Đây là những thư mục, không phải tập tin, và chúng tôi muốn để đổ các thư mục một lần nữa và chỉ bỏ qua các tập tin trong thư mục đó, mà chúng ta có đã có trong các kho lưu trữ tar đầu tiên. Hơn nữa, chúng tôi cho phép sedxóa tên tệp cuối cùng, vì rất có thể nó đã bị đổ chỉ một phần, vì vậy chúng tôi sẽ lưu trữ lại.

Sau đó, chỉ cần chuyển files-donedanh sách qua tùy chọn -X sang một tarlệnh mới :

tar cfvX archive2.tar files-done SOURCEDIR

Đảm bảo sử dụng tên tệp đầu ra khác trên lệnh tar mới, nếu không bạn sẽ ghi đè lên kho lưu trữ một phần của mình. Đừng cố gắn trực tiếp vào kho lưu trữ tar bị hỏng.

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.