Bash 当文件夹中的文件可能由其他进程写入时,如何对文件夹进行tar
我正在尝试为cron作业创建脚本。我有大约8GB的文件夹,其中包含数千个文件。我正在尝试创建一个bash脚本,该脚本首先对文件夹进行tar,然后将tarred文件传输到ftp服务器 但我不确定tar是在给文件夹涂焦油,还是其他进程在访问文件夹中的文件或写入文件夹中的文件 尽管对我来说,如果tar在给文件夹加焦油时,焦油文件不包含最近的更改,这也没问题 建议我正确的方法。谢谢。我认为在存档过程中修改存档文件时,tar失败(因此不要创建存档)。正如Etan所说,解决方案取决于您最终在tarball中想要什么 为了避免tar失败,您只需在调用tar之前将文件夹复制到其他位置即可。但是在这种情况下,您不能对备份目录的一致性有信心。这不是一个原子操作,因此一些文件将过时,而其他文件将过时。这可能是一个严重的问题,也可能不符合您的情况 如果可以,我建议您配置如何创建这些文件。例如:“只追加最近的文件,超过1天的文件永远不会更改”,在这种情况下,您可以轻松地只备份旧文件,备份将保持一致 更一般地说,您必须接受丢失最后一个数据和不一致(每个文件在不同的日期备份),或者您必须在不同的级别采取行动。我建议:Bash 当文件夹中的文件可能由其他进程写入时,如何对文件夹进行tar,bash,cron,tar,Bash,Cron,Tar,我正在尝试为cron作业创建脚本。我有大约8GB的文件夹,其中包含数千个文件。我正在尝试创建一个bash脚本,该脚本首先对文件夹进行tar,然后将tarred文件传输到ftp服务器 但我不确定tar是在给文件夹涂焦油,还是其他进程在访问文件夹中的文件或写入文件夹中的文件 尽管对我来说,如果tar在给文件夹加焦油时,焦油文件不包含最近的更改,这也没问题 建议我正确的方法。谢谢。我认为在存档过程中修改存档文件时,tar失败(因此不要创建存档)。正如Etan所说,解决方案取决于您最终在tarball中
- 一个非常令人不快的惊喜是:如果大小被截断,那么tar将用“NUL”字符“填充”它,以匹配它记录的大小。。。这会产生非常不愉快的副作用。在某些情况下,tar在解除错误时不会说任何话,而是默默地添加与大小匹配所需的NUL字符(事实上,在unix中,它甚至不需要这样做:操作系统会这样做,请参阅“稀疏文件”)。在某些情况下,如果在对文件进行tar时发生了截断,tar会抱怨在解除错误时遇到了意外的文件结尾(因为它预期的是XXX字节,但读取的值小于此值),但仍然会说该文件应该是XXX字节(然后unix操作系统会将其创建为稀疏文件,并带有“NUL”字符神奇地附加在末尾,以匹配阅读时的预期大小)。
(查看NUL字符:一个简单的方法是
(或者在非常旧的unix上减少文件
。查找任何cat-v文件|更多
)^
- 但恰恰相反,如果文件只是附加到(日志等)中,那么副作用就没有那么大问题:你只会错过其中的一些部分(你说你没问题),并且不会产生令人不快的“填充NUL字符”副作用。tar在解除文件错误时可能会抱怨,但它会解除文件的错误