递归复制到平面目录

时间:2021-03-31 20:09:23

标签: bash rsync large-data-volumes backup-strategies

我有一个图像目录,目前约有 117k 个文件,大小约为 200 g。我的备份解决方案在那个大小的目录上呕吐,所以我希望将它们拆分为 1000 个子目录。不需要名称排序或类型区分。我只是希望我的备份不会发疯。

从另一个答案中,有人提供了一种将文件移动到拆分配置中的方法。然而,这是一个举动,而不是一个副本。由于这是备份,我需要一份副本。

我有三个想法:

1. 文件以随机文件名添加到大目录中,因此 alpha 排序不是计算增量的实用方法。即使使用像 rsync 这样的工具,在列表的开头添加几百个文件也可能会导致备份方面的重大改组和大量文件移动。

2. 解决这个问题的方法是颠倒这个过程:进行初始文件拆分,将新文件添加到最新目录的备份中,在 1000 文件标记处手动创建一个新的子目录,然后使用 rsync 将文件从备份目录拉到工作区,例如 rsync -trvh <backupdir>/<subdir>/ <masterdir>

3. 虽然对类似问题的一些答案表明 rsync 是一个糟糕的选择,但我可能需要进行多次传递,其中一次是通过较慢的链接到异地位置。使用 rsync 及其启动解析对性能的影响远远优于每天重新上传备份所需的时间。

我的问题是:

如何创建一个脚本,该脚本将递归到所有 117 多个子目录并将包含的文件转储到我的大工作目录中,而无需进行大量不必要的复制?

我最初的研究产生了这样的结果:

#!/bin/bash
cd /path/to/backup/tree/root
find . -type d -exec rsync -trvh * /path/to/work/dir/

我在这里走对了吗?

假设现代版本的 bash、find 和 rsync 是安全的。

谢谢!

0 个答案:

没有答案
相关问题