![如何恢复被终止的 tar 命令](https://linux22.com/image/27817/%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%E8%A2%AB%E7%BB%88%E6%AD%A2%E7%9A%84%20tar%20%E5%91%BD%E4%BB%A4.png)
我正在做一个 : tar -cvf
,我必须用 来杀死它ctrl-C
。我知道我应该做一个Ctrl-Z
,然后将任务带回到前台......但这不是故事。
我可以从停止任务的地方继续执行吗?
答案1
此方法将重新创建 tar 存档,并将完成的部分附加到现有文件中。如果通过网络连接进行备份,这会很有用。如果 INFILES 中的任何数据发生更改,则可能会导致存档损坏。请务必在完成后测试您的存档。
将以下行中的 INFILES 和 OUTFILE 更改为正确的名称。
INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"
解释:
SIZE="$(wc -c < $OUTFILE)"
# 获取当前存档的大小。
tar -cz --to-stdout "$INFILES" |
# 开始创建存档并将输出发送到tail
命令。
tail -c +$(($SIZE+1)) >>
# 忽略$SIZE+1之前的数据,并恢复归档文件$OUTFILE的其余部分。
答案2
在我的存档不完整的情况下,我会做什么tar
,我创建存档中的文件列表:
tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done
该sed
命令删除所有带有尾部斜杠的行:这些是目录,而不是文件,我们希望再次转储这些目录,并且只跳过这些目录中的那些文件,这些文件已经在第一个 tar 存档中。此外,我们sed
删除最后一个文件名,因为它很可能只是部分转储,所以我们将再次归档它。
然后只需files-done
通过 -X 选项将列表传递给新tar
命令:
tar cfvX archive2.tar files-done SOURCEDIR
确保在新的 tar 命令上使用不同的输出文件名,否则您将覆盖部分存档。不要尝试直接附加到损坏的 tar 存档。
答案3
最好的解决方案是删除 tar 文件并重新启动nohup
以&
.或者,您可以运行tar -tfv
并将其用作新tar -cvf
.
答案4
你不能;你只需要重新开始。