我正在尝试为cron作业创建一个脚本。我有大约8 GB的文件夹包含数千个文件。我正在尝试创建一个bash脚本,首先tar该文件夹,然后将tarred文件传输到ftp服务器。
但我不确定tar是否正在使用该文件夹,而其他一些进程正在访问其中的文件或写入其中的文件。
虽然如果tar tar文件没有包含最近的更改,那么它对我来说没问题。
建议我正确的方法。感谢。
答案 0 :(得分:1)
一个非常令人不快的惊喜是:如果大小被截断,那么tar将用“NUL”字符“填充”它以匹配它的记录大小......这会产生非常令人不快的副作用。在某些情况下,tar,当解开时,什么都不会说,并且默默地添加它需要匹配大小的NUL字符(事实上,在unix中,它甚至不需要这样做:操作系统执行它,请参阅“稀疏文件“)。在某些情况下,如果在文件去皮过程中发生截断,tar会抱怨它在解开时会遇到意外的文件结尾(因为它预计有XXX个字节,但只读取少于此数),但仍然会说该文件应该是XXX bytes(然后unix操作系统会将其创建为稀疏文件,并在末尾神奇地附加“NUL”字符以匹配预期的大小)。
(查看NUL字符:一个简单的方法是less thefile
(或cat -v thefile | more
在一个非常旧的unix上。查找任何^@
)
但相反,如果文件只附加到(日志等),那么副作用就不那么成问题了:你只会错过它们的一些部分(你说你很好),并没有那种令人不愉快的“填充NUL字符”的副作用。 tar解压文件时可能会抱怨,但它会解压缩。
答案 1 :(得分:0)
我认为在归档期间修改归档文件时tar失败(因此不要创建归档)。正如Etan所说,解决方案取决于你最终在tarball中想要的东西。
为避免tar失败,您可以简单地将文件夹复制到其他地方以调用tar。但在这种情况下,您无法确信备份目录的一致性。这不是一个原子操作,因此一些文件将是todate而其他文件将过时。这可能是一个严重的问题或不符合您的情况。
如果可以,我建议您配置这些文件的创建方式。例如:“仅附加最近的文件,不会更改超过1天的文件”,在这种情况下,您可以轻松备份旧文件,备份将保持一致。
更一般地说,你必须接受松散的最后数据 AND 不一致(每个文件在不同的日期备份),或者你必须采取不同的行动。我建议: