tar:由于先前的错误而以失败状态退出


78

我已经写了一个小脚本,可以压缩并压缩目录和文件的列表。

该脚本似乎已成功运行,因为在脚本运行后会创建一个可用的.tar.gz文件。

但是,脚本完成后,我得到以下令人讨厌的消息:

tar:由于先前的错误而以失败状态退出

在脚本运行期间,我没有看到任何错误消息,并且就像我说的那样,生成的文件可以解压缩而没有警告/错误。由于我将其用作备份的一部分,因此我想确保我不会忽略任何严重的问题。

产生此错误/警告消息的可能原因是什么-我可以安全地忽略它吗?如果我不能忽略它,那么诊断和解决错误的步骤是什么?

我在Ubuntu 10.0.4上运行

Answers:


100

如果由于某种原因tar无法将所有指定的文件添加到tar中,您将收到该消息。一种(如果最常见的情况)是对其中一个文件没有读取权限。这可能是个大问题,因为您正在使用它进行备份。如果您正在使用该-v标志,请尝试将其保留。这将减少输出,并让您了解发生了什么。


8
+1为建议(我之前使用的是“ verbose”选项)。我发现至少一个文件存在权限问题。至少现在我知道如何解决这个问题。非常感谢
morphistic

是使用sudo解决了该问题
whizcreed

放弃-v标志是很好的建议,并帮助我解决了我的问题。“冗长的”掩盖了文字背后的失败原因
scottyseus


6

有时备份在备份期间可能会更改的文件(例如日志文件),您可能会发现tar选项“ --ignore-failed-read”很有用(我在Debian Linux上,不确定是否使用非gnu tar)。

可以将标准输出和错误重定向到2个不同的文件中,例如:

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

我发现这通常是安全的,但是请注意,因为tar不会停止...


5

我遇到了同样的问题,以上答案都对我没有帮助。但是,我发现运行以下命令有效:

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

tar: Exiting with failure status due to previous errors可以通过关闭-v选项来标识所引用的错误。经检查,错误来自诸如/run和的目录/sys

通过排除这些目录,它可以正常工作。希望这对遇到类似问题的人有所帮助。


3

我有同样的问题。我所做的就是从命令中删除破折号(-)。

而不是将其键入为

tar -cvfz output.tar.gz文件夹/

尝试输入为

tar cvfz output.tar.gz文件夹/

我不知道为什么破折号引起了我的问题,但至少起了作用。


6
您可能使用GNU tar进行了测试。您感到困惑的原因是它接受两种不同样式的选项-不带破折号的“旧式” tar选项和带破折号的“标准unix”选项。带破折号的选项要求选项的自变量跟随该选项。因此,在这种情况下,for的参数-f应该在两者之间,output.tar.gz并且不能z在两者之间。如果不重新排列选项,则正确的是:tar -cvf output.tar.gz -z folder/。旧样式希望所有选项都放在一个地方,所有参数都在后面。
pabouk


@pabouk该评论似乎值得一个答案。请添加该评论的内容作为对此问题的答案,以便功劳归于应得的功劳。
cwallenpoole 2014年

我也遇到了问题,但是它是一个名为-v的文件,因此tar显然有一些关于可以备份哪些文件的错误……这应该不是问题。由于rm和mv无法工作,我的解决方法是使用文件管理器。因此,显然,MV和rm也是越野车。我试过mv'-v'v和rm'-v'但收到错误消息。tar提到它无法统计tar文件。使用-cfjv
Jim Michaels

1

您误解了先前的答案。问题不在于-,而是f参数列表中的。

tar cvfz target.tgz <files>

将尝试创建一个名为“ z”的档案,因为该档案后面的文本f。错误消息是因为tar找不到要添加到存档“ z”的“ target.gz”。

tar cvzf target.tgz <files>

将正确创建target.tgz并向其中添加文件。这是因为target.tgz是f参数之后的第一个文本。


这应该作为对“困惑”答复的评论添加。不幸的是,只有获得50分的声​​誉后,您才可以添加此类评论。主题:您是否测试过?我用GNU tar 1.26进行了测试,带有和不带有破折号的变体确实有所不同,如jack的回复所述。它的行为与答复中所写的相同。
pabouk

0

通常,您可以忽略该消息。如果在tar创建过程中对基础目录树进行了任何更改(例如文件删除/创建/修改),它将抛出该消息。另外,如果有特殊文件(例如设备节点,fifos等),它们也会引起该警告。

您确定看不到任何罪魁祸首文件吗?试试看tar cvfz yourtarball.tgz /your/path


0

我遇到了类似的问题,使我收到的文件解压缩。原来,我没有权限将文件写入root拥有的存档中。使用sudo修复它。


0

对于初学者来说,出现此错误的原因之一是
他们忘记在存在文件的目录中执行操作
转到该位置并执行命令 
由于我的文件在桌面上 
〜/ Desktop#tar-cf done.tar abc xyz
其中xyz和abc是文件,我们将这些文件存储在done.tar中
如果我们在其他位置执行命令,将得到以上错误 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.