Tôi có thể tự động hóa tính năng đa âm lượng của tar không?


8

Ok, vì vậy tôi vừa đọc qua trang này sau khi cải thiện giải pháp sao lưu hiện tại trên máy chủ Debian của tôi. Tar dường như đang cung cấp một tính năng đa âm lượng khá hay, mặc dù khi tôi dùng thử, nó yêu cầu tôi làm Prepare volume #X for ‘mybackup.tar.gz’ and hit return:.

Tôi nên tự động hóa tính năng này như thế nào khi tôi muốn sử dụng tính năng này trong tập lệnh CRON tự động khi không có ai ở đó để đẩy trở lại và nhập bất cứ điều gì được yêu cầu bởi dấu nhắc đa âm lượng.

Là sử dụng cách splitduy nhất?

Câu trả lời:


14

Đây là một giải pháp:

printf 'n file-%02d.tar\n' {2..100} | 
    tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null

trong đó 100 là số lớn hơn hoặc bằng số lượng.

Biên tập

Đặt một số lượng lớn không phải là một vấn đề, mặc dù tôi có xu hướng không lấy một số vô lý.

Một thay thế có thể là một tập lệnh "tập tiếp theo" , mà bạn có thể đặt với -Ftùy chọn,

tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null

sau đó ./myscriptđưa vào

#!/bin/bash

prefix="$1"
n=1
while [[ -e "$prefix-$n.tar" ]]; do
  ((n++))
done
mv "$prefix.tar" "$prefix-$n.tar"
echo "$prefix-$n.tar"

Nó sẽ được thực hiện ở mỗi đầu âm lượng, và sẽ chuyển file.tarsang phần thích hợp fileNNN.tar. Đối với tập cuối cùng, tập lệnh sẽ không được thực thi, vì vậy tên tập cuối cùng sẽ ở lại file.tar.

Chỉnh sửa 2

Tôi đã kết thúc với giải pháp công phu sau đây.
Đây là hai tập lệnh, một cho việc tạo và một cho việc trích xuất:

#!/bin/bash
# CREATION SCRIPT

# save on file the initial volume number
echo 1 >number

# multi-volume archive creation
tar -ML 100000 -F './tar-multi-volume-script c file' -cf file.tar Documents2/ 2>&-

# execute the "change-volume" script a last time
./tar-multi-volume-script c file

#!/bin/bash
# EXTRACTION SCRIPT

# save on file the initial volume number
echo 1 >number

# execute the "change-volume" script a first time
./tar-multi-volume-script x file

# multi-volume archive extraction
tar -M -F './tar-multi-volume-script x file' -xf file.tar 2>&-

# remove a spurious file
rm file.tar

nơi ./tar-multi-volume-scriptđược đưa ra bởi

#!/bin/bash
# TAR INVOKED SCRIPT

mode="$1"
prefix="$2"
n=$(<number)

case $mode in
  c) mv "$prefix.tar"    "$prefix-$n.tar" ;;
  x) cp "$prefix-$n.tar" "$prefix.tar"    ;;
esac

echo $((n+1)) >number

Rõ ràng bạn phải thay đổi nhiều bit ở đây và ở đó để thích nghi với tình huống của bạn và để chắc chắn rằng nó sẽ hoạt động cron, đó luôn là một thách thức nhỏ.


Tôi thích điều đó, nhưng sau đó tôi cần biết số lượng tối đa của mỗi thư mục trước? Ý tôi là, điều gì xảy ra khi tôi vượt quá 716m trong 100 thư mục? Tôi có thể chỉ đặt tối đa thành một số cao vô lý như 919191 và để lại không?
Công nghiệp

@ Công nghiệp: xem chỉnh sửa
enzotib

Cảm ơn rất nhiều vì câu trả lời tuyệt vời này, Enzotib! Làm thế nào bạn có thể đề nghị khôi phục / trích xuất bằng cách sử dụng tập lệnh "tập tiếp theo" này?
Công nghiệp

@ Công nghiệp: đây là một giải pháp gần như hoàn chỉnh
enzotib

Cách tiếp cận tuyệt vời! Cảm ơn mọi người tham gia. - Hãy cẩn thận: Tôi có thể thấy rằng giải pháp đầu tiên sử dụng một bashtính năng tích hợp được gọi là mở rộng nẹp ; điều này có thể không có sẵn trong tất cả các vỏ. Nếu bạn gặp phải một thông báo lỗi hoặc hành vi không mong muốn, printf 'n file-%02d.tar\n' $(seq 2 100) | (etc.)thay vào đó, hãy sử dụng nó để làm việc ở bất cứ đâu.
cú pháp

0

Khi nghi ngờ, hãy đọc hướng dẫn ...

http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html

hoặc chỉ cần sử dụng chuỗi tìm kiếm sau tại công cụ tìm kiếm internet yêu thích của bạn:

"Lưu trữ dài hơn một băng hoặc đĩa"

Phần đó trong hướng dẫn sử dụng GNU tar cung cấp một tập lệnh phù hợp (được gọi là tập mới ) để sử dụng với tùy chọn -F của lệnh tar. Bạn có thể điều chỉnh kịch bản đó theo sở thích của mình nếu muốn.

thưởng thức!


Bạn dường như đã quên đề cập đến --new-volume-scriptcờ?
SamB

7
Xin đừng chỉ đăng liên kết; bao gồm một số bối cảnh để trang web kia đi xuống, có đủ thông tin ở đây để hiểu câu trả lời của bạn.
jasonwryan
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.