Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Linux查找的奇怪结果_Linux_Bash_Find - Fatal编程技术网

使用Linux查找的奇怪结果

使用Linux查找的奇怪结果,linux,bash,find,Linux,Bash,Find,我正在尝试设置一个备份shell脚本,该脚本将在我的服务器上每周运行一次,并将每周备份保留十周,所有这些都运行良好,除了一件事 我有一个文件夹,其中包含许多相当大的文件,因此该文件夹的十次每周备份占用了相当大的磁盘空间,而且该文件夹中的许多较大文件很少更改,因此我想我会将该文件夹的备份分为两部分:一部分用于“正常”每周备份中包含的较小文件(保存10周)和一个文件,用于每周更新的较大文件,而不保留较旧的每周版本 我对较大的文件使用了以下命令: /usr/bin/find /other/projec

我正在尝试设置一个备份shell脚本,该脚本将在我的服务器上每周运行一次,并将每周备份保留十周,所有这些都运行良好,除了一件事

我有一个文件夹,其中包含许多相当大的文件,因此该文件夹的十次每周备份占用了相当大的磁盘空间,而且该文件夹中的许多较大文件很少更改,因此我想我会将该文件夹的备份分为两部分:一部分用于“正常”每周备份中包含的较小文件(保存10周)和一个文件,用于每周更新的较大文件,而不保留较旧的每周版本

我对较大的文件使用了以下命令:

/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,因为find为xargs提供了输入。

首先,我不知道回答您自己的问题是否被认为是不好的形式,但我还是在这样做因为我意识到了我的错误,我想结束这一切,希望能够帮助那些和我有同样问题的人

现在,一旦我意识到我做错了什么,坦白地说,我有点尴尬,因为我之前没有看到它,但就是这样:

我在命令行上做了一些实验运行,过了一会儿我意识到输出不仅列出了所有文件,而且还列出了目录本身。目录当然也是文件,它们小于100米,所以它们(最有可能是这样)当它们被包含时,它们中的所有文件都被包含,而不管大小。这也解释了为什么输出文件比预期的大五倍

因此,为了克服这个问题,我在find命令中添加了
-typef
,它只包含常规文件,瞧,它成功了

总而言之,我现在用于较小文件的调整命令是:

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

“该文件夹中许多较大的文件很少更改。”在这种情况下,大多数备份脚本都使用硬链接来节省空间。幸运的是,您不必重新发明轮子。只需安装一个类似的备份脚本并使用它即可。谢谢。我仍然很好奇find的错误之处,但我看了一下rsnapshot,它似乎很有趣!rsnapshot也有您可能希望合作的竞争对手nsider:dirvish,ccollect,等等。关于你的
find
+
tar
命令,如果它们有任何明显的问题,我希望现在有人已经给出了答案。好的。非常感谢你花时间评论。我也会看看你提到的其他选项。如果文件超过100MB的文件放在LARGE.tar中,低于100MB的文件放在PRJ.tar中…正好100MB的文件放在哪里?;-)@Mark Setchell:Ha!是的,当我设置这些规则时,我确实想到了这一点,因为我通常在处理限制时会考虑到这一点,但由于这是一个爱好项目,我不确定我会如何使用find,我选择忽略它,至少现在是这样。如果我得到的文件正好是100米,我必须解决这个问题(或者在100米文件中添加一个小文本文件)。