enz*_*tib 14
这是一个解决方案:
printf 'n file-%02d.tar\n' {2..100} |
tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
其中 100 是一个大于或等于卷数的数字。
编辑
设置一个大数字应该不是问题,尽管我倾向于不接受一个荒谬的数字。
另一种可能是“下一卷”脚本,您可以使用该-F选项进行设置,
tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
然后在./myscript放
#!/bin/bash
prefix="$1"
n=1
while [[ -e "$prefix-$n.tar" ]]; do
((n++))
done
mv "$prefix.tar" "$prefix-$n.tar"
echo "$prefix-$n.tar"
Run Code Online (Sandbox Code Playgroud)
它将在每个卷结束时执行,并将移动file.tar到适当的fileNNN.tar. 对于最后一个卷,脚本将不会执行,因此最后一个卷名保留为file.tar。
编辑 2
我最终得到了以下详细的解决方案。
这里有两个脚本,一个用于创建,另一个用于提取:
#!/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
Run Code Online (Sandbox Code Playgroud)
和
#!/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
Run Code Online (Sandbox Code Playgroud)
./tar-multi-volume-script由哪里给出
#!/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
Run Code Online (Sandbox Code Playgroud)
显然,您必须在这里和那里更改许多位以适应您的情况并确保它可以在cron.
| 归档时间: |
|
| 查看次数: |
10062 次 |
| 最近记录: |