Đâ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 -F
tù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.tar
sang 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
và
#!/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ỏ.