And*_*rew 5 backup tar gzip duplicity
我的网络服务器上有一组由 duplicity 软件生成的文件:
已在未加密的情况下进行备份。
我目前的主机在他的服务器上没有口是心非,不想安装它。如何使用远程 SSH 访问解压这些文件?也许有一些 bash 脚本可以做到这一点?
小智 8
如果任何人遇到这样(我只是有)有一些比较详细的(并且大多是正确的)步骤在这里。
关键细节
关键是将所有duplicity-full.*.difftar.gz
文件解压到同一个地方,这样你就只剩下两个snapshot/
和multivol_snapshot/
目录了。
如果您的文件在,snapshot/
那么您就完成了。否则multivol_snapshot/
在您的文件原来所在的路径中找到目录:您需要将此目录中的所有文件连接在一起以重新创建原始文件。文件被编号,并且可以使用cat
命令连接在一起。根据原件的大小,可能会有很多部分。
原始指令有问题
上面链接的说明建议使用cat * > rescued-file
. 不幸的是,如果您有 9 个以上的零件,这种简单的方法就会失败。由于*
以字典顺序而不是数字顺序展开,10
将在 之前列出2
,并且文件将以错误的顺序重建。
解决方法
一种简单的方法是记住,当数字长度相同并且匹配单个字符时,字典顺序确实有效?
。所以,如果您的最大的文件有3个数字,你可以手动输入:
cat ? ?? ??? > rescued-file
Run Code Online (Sandbox Code Playgroud)
?
根据最大文件号,根据需要添加或删除模式。
脚本
如果您有很多文件要恢复并且不喜欢为所有文件都键入这些文件,您可能更喜欢使用这样的脚本。它列出每个文件的包含目录,从列表中删除重复项,然后转到每个目录并content
从那里的片段创建一个文件。(spacer
只是为了$1
工作。)
find multivol_snapshot/ -type f -printf '%h\0' | \
sort -uz | \
xargs -0 -n 1 sh -c 'cd "$1" ; cat $(ls | sort -n) > content' spacer
Run Code Online (Sandbox Code Playgroud)
现在,您只需将/content
要查找的任何文件名添加到末尾,您就会找到它。
限制
这不会恢复任何原始文件权限或所有权。它也不处理增量备份,但是链接的说明在这一点上也遇到了一些死胡同——他们只是建议使用rdiff
“将文件拼接在一起”并将读者推荐给man rdiff
.