2014-09-19 73 views
0

我想设置一个备份shell脚本,应该在我的服务器上每周运行一次,并保持每周备份十周,并且一切运行良好,除了一件事...奇怪的结果使用Linux发现

我有一个包含许多相当大的文件的文件夹,这样该文件夹的十大每周备份占用相当大的磁盘空间和许多文件夹中的文件较大的很少改变,所以我想我会分割备份的文件夹分为两部分:一部分用于包含在“正常”每周备份(并保留十周)的较小文件,另一部分文件用于每周更新的较大文件,而不保留较早的每周版本。

我用下面的命令为更大的文件:

/usr/bin/find /other/projects -size +100M -print0 | /usr/bin/xargs -0 /bin/tar -rvPf /backup/PRJ-files_LARGE.tar 

按预期工作。 tar -v选项用于调试。然而,归档较小的文件时,我使用了一个类似的命令:

/usr/bin/find /other/projects -size -100M -print0 | /usr/bin/xargs -0 /bin/tar -rvPf /backup/PRJ-files_$FILE_END.tar 

其中$ FILE_END是周数。上面的行不起作用。我有脚本运行的前一天,它花了几个小时,并产生一个70 Gb的文件,虽然预期的输出大小约为14 Gb(有很多文件)。似乎在大文件中有一些文件的重复,但我还没有能够完全检查。昨天我在命令行运行了上面的命令来查看较小的文件,我可以看到我知道包含大于100 Mb的文件。

不过,刚才我在命令行中运行find /other/projects -size -100M,并且生成文件列表预期。

因此,如果任何人有任何想法我做错了我会很感激的提示或指针。文件名包括空格和各种字符,例如单引号,如果这与它有关。

我能想到的唯一的事情就是我没有正确使用xargs,并且我对此并不是很熟悉,但我仍然认为问题在于我使用find,因为它会查找给出的输入到xargs。

+0

_“许多在该文件夹的文件较大的很少改变。” _大多数备份脚本中使用硬连接,以节省空间,这情况。幸运的是,你不必重新发明轮子。只需安装像['rsnapshot'](http://www.rsnapshot.org/)这样的备份脚本并使用它。 – John1024 2014-09-19 06:11:23

+0

谢谢。我仍然很好奇我在做什么,但是我看了一下rsnapshot,看起来很有趣! – mdv 2014-09-20 11:36:35

+0

rsnapshot也有你可能想要考虑的竞争者:dirvish,ccollect等等。关于你的'find' +'tar'命令,如果有任何明确的问题,我希望现在有人会发布一个答案。 – John1024 2014-09-20 20:30:01

回答

2

首先,我不知道,如果它被认为是不好的形式或不回答自己的问题,但我无论如何做它,因为我意识到自己的错误,我想关闭这一点,并希望能够帮助别人与我有同样的问题。现在

,一旦我意识到我做错了什么我坦率地说我有点不好意思,我没看出来以前,但这是:

我没有在命令行中,一段时间后,一些实验运行我意识到输出不仅列出所有文件,还列出了目录本身。目录当然也是文件,并且它们小于100M,所以它们(最有可能是)被包括在内,当它们被包括时,它们中的所有文件也被包括在内,而不管它们的大小如何。这也可以解释为什么输出文件比预期大五倍。

因此,为了克服这一点,我添加-type f,其中仅包括普通文件,以find命令你瞧,它的工作!

总括来说,调整的命令我使用较小的文件现在是:

/usr/bin/find /other/projects -size -100M -type f -print0 | /usr/bin/xargs -0 /bin/tar -rvPf /backup/PRJ-files_$FILE_END.tar 
+0

[回答您自己的问题](http://stackoverflow.com/help/self-answer)非常好。 – fedorqui 2014-09-28 11:49:59

+0

如果超过100MB的文件进入LARGE.tar,并且100MB以下的文件进入PRJ.tar ...准确地100MB的文件去哪里? ;-) – 2014-09-28 15:12:28

+0

@Mark Setchell:哈!是的,当我设定这些规则时,确实发生了这种情况,因为我在处理限制时通常会考虑这些规则,但是因为这是一项业余爱好项目,所以我不确定如何使用find选择忽略至少现在是这样。我应该得到一个精确到100M的文件,我将不得不解决这个问题(或者为100M文件添加一个小文本文件)。 – mdv 2014-09-29 14:12:04