我有一个音乐目录和一个带两个 SD 卡插槽的 MP3 播放器。该目录的内容对于一张卡来说太大了,所以我想将其分成两张。
我喜欢按字母顺序排列东西。如果我填满了 SD1,而 SD2 部分为空,那么每当我添加新音乐时,我要么必须通过在 SD2 上添加新内容来打破字母顺序,要么重新调整周围的所有内容。
另一件事是,我的目录是按艺术家分组的,所以如果我在 SD1 上收到某个艺术家的新专辑,它就不适合。
简而言之,我希望两张卡的填充量大致相等。
现在我的解决方案其实还可以:
- 列出目录并将列表输出到文件
- 打开文件并找到中间点(我确信有一个聪明的方法可以做到这一点,但在 vim 中手动完成很快)
- 剪切列表的下半部分并将其粘贴到第二个文件中
rsync --files-from=
在 SD1 上使用一个文件运行,在 SD2 上使用下一个文件运行。任务完成!
但这让我开始思考,是否有更准确的方法来做到这一点,以便两张 SD 卡更均匀地填充?你会怎么做呢?
我想我可能不得不
- 在音乐目录上运行
du
以查找totalSize
. - 然后循环遍历每个艺术家目录以获取它们的尺寸并保持运行总数。
- 一旦总数超过
totalSize * 0.5
,输出您刚刚计算的所有目录的列表以获得前半部分,并将其余部分放入第二个文件中以获得另一半? - 从文件执行相同的 rsync
谁有更好的想法吗?
答案1
所以,有点讽刺的是,这将是真的如果这两个 SD 卡位于同一网络上的两台独立计算机,则很容易做到,因为有各种集群存储解决方案可以完全满足您的要求。
然而,考虑到这不是一个非常现实的选择(使用集群文件系统对此来说太过分了),您最好的选择可能是一个名为 mhddfs 的程序。官方主页是俄语的,但是有一个不错的帖子这里关于它,它打包了许多不同的发行版。本质上,它执行的是文件级 RAID。这里的一大优点是,一旦设置了 mhddfs 挂载,您实际上只需调用rsync
一次即可。每个文件最终都将完全位于一个文件系统上,并且它将智能地管理跨文件系统的分发。此外,它不会在底层设备上存储任何状态(它只是查看设备上的数据分布,以找出放置新创建的文件的位置,并正确检查所有文件中是否存在现有文件),因此不会浪费任何数据。空间也可以。