我编写了一个小脚本,可以对目录和文件列表进行 tar 和压缩。
该脚本似乎运行成功,因为脚本运行后创建了一个可用的.tar.gz 文件。
然而,脚本运行完成后我收到了这个烦人的消息:
tar:由于先前的错误,以失败状态退出
脚本运行时我没有看到任何错误消息,而且就像我说的,生成的文件可以解压缩,没有任何警告/错误。由于我将其用作备份的一部分,因此我想确保我没有忽略一些严重的问题。
产生此错误/警告消息的可能原因是什么 - 我可以安全地忽略它吗?如果我不能忽略它,诊断和解决错误的步骤是什么?
我在 Ubuntu 10.0.4 上运行
答案1
如果出于任何原因,tar 无法将所有指定文件添加到 tar,您将收到该消息。最常见的原因之一是对其中一个文件没有读取权限。这可能是一个大问题,因为您正在使用它进行备份。如果您正在使用该-v
标志,请尝试将其关闭。这应该会减少输出并让您看到发生了什么。
答案2
问题在于f
参数。它将下一个值作为文件名,因此它必须是最后一个参数:
tar cvzf output.tgz folder
或者:
tar -cvzf output.tgz folder
这些都是相同的并且不会产生错误。
答案3
有时备份在备份过程中可能会发生变化的文件(如日志文件),您可能会发现 tar 选项“--ignore-failed-read”很有用(我在 Debian Linux 上,不确定非 gnu tar 是否有用)。
标准输出和错误可以重定向到两个不同的文件中,例如:
LOGDIR='/var/log/mylogdir'
LOG=${LOGDIR}/backup.log
ERRLOG=${LOGDIR}/backup.error.log
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'
tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG
我发现这通常是安全的,但请小心,因为焦油不会停止......
答案4
我遇到了同样的问题。我所做的就是从命令中删除破折号(“-”)。
而不是输入如下内容
tar -cvfz 输出.tar.gz 文件夹/
尝试输入如下内容
tar cvfz 输出.tar.gz 文件夹/
我不知道为什么这个破折号会给我带来麻烦,但至少它起作用了。