Làm cách nào để tạo tệp lưu trữ tar tách thành hoặc kéo dài nhiều tệp?


26

Theo trang này , người ta có thể cho phép tar tạo một kho lưu trữ tar "tách" thành các tệp 100 Mb:

tar -c -M --tape-length = 102400 --file = đĩa1.tar tinyefile.tgz

Vấn đề là lệnh này sẽ yêu cầu bạn tương tác cung cấp tên tệp mới cho tệp tiếp theo, sau khi tệp đầu tiên được điền.

Bất cứ ai cũng biết một cách để bỏ qua bước tương tác này và để tar tự động "chia tách"?


Câu trả lời:


19

Hãy xem --new-volume-scripttùy chọn, cho phép bạn thay thế cơ chế nhắc nhở bằng một cơ chế khác hoặc bằng một tên tệp được tạo. ( (tar.info)Multi-Volume Archivestrong tartrang thông tin.) Vấn đề với splitlà bạn cần phải catghép các mảnh lại với nhau để làm bất cứ điều gì, trong khi đó một kho lưu trữ đa biến nên linh hoạt hơn một chút.


Điều đó đúng, tất nhiên.
Eduardo I.

2
Cảm ơn, đây là những gì tôi đang tìm kiếm! Bây giờ tôi phát hiện ra rằng thực sự có một số hướng dẫn (bao gồm ví dụ) có sẵn ở đây: gnu.org/software/tar/manual/tar.html#Using-Multipl-Tapes
Samuel Lampa

Vấn đề với điều này là nó liên quan quá mức vô nghĩa và thúc đẩy sự đối lập của các ứng dụng phong cách Unix thích hợp.
Jan Kyu Peblik

33

Bạn có thể sử dụng chia cho việc này:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

Điều này bảo tar gửi dữ liệu đến thiết bị xuất chuẩn và phân tách để chọn dữ liệu từ stdin - ngoài ra sử dụng hậu tố số ( -d), kích thước khối ( -b) là 100M và sử dụng 'tardisk' làm cơ sở cho tên tệp kết quả (tardisk00, tardisk01, tardisk02, v.v.)

Để trích xuất dữ liệu sau đó, bạn có thể sử dụng:

cat tardisk* | tar xzpvf -

1
Hiệu chỉnh nhỏ, -dlà cho hậu tố số, không phải tiền tố.
yclian

8

Tất nhiên tùy chọn tốt nhất để sử dụng là --new-volume-scripttùy chọn.

Nhưng, nếu bạn biết kích thước của tệp (trong trường hợp này là tinyefile.tgz), thì bạn cũng có thể làm điều này:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

Tóm lược:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(Đối với -L, chỉ định số lượng cần thiết để tổng số tệp tar lớn hơn tinyefile.tgz)

Nếu bạn đang cố gắng để tarmột cấu trúc cây thư mục


1

Tôi đã làm cho nó hoạt động với các lệnh sau:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

Vấn đề duy nhất là đó part_1.tarthực sự sẽ là tập tin cuối cùng, và những cái khác được thay đổi bởi một. Tức part_2.tarlà thực sự là phần đầu tiên, và part_k.tarlà phần (n - 1)thứ . Sửa lỗi này với một số kịch bản shell là chuyện nhỏ và để lại như một bài tập cho người đọc.


1

nó sẽ tự động tạo các tệp có kích thước 1,1 GB, nếu tar của bạn có kích thước lớn hơn, bạn có thể tăng số lượng, ví dụ 1000 {2..1000} hoặc bạn có thể tăng đầu vào thành đối số độ dài băng.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
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.