我有一个非常大的档案,由非常小的文件组成,连接成一个文本文件,并带有“”分隔符。对于较小的档案,我将split
使用“”作为模式进行档案,然后处理生成的文件。然而,在这个存档中,此类文件的数量级约为一亿个——显然,对于将它们全部放入一个目录来说太多了。我创建了文件夹aa
、ab
等,以便尝试将它们移动到创建的目录中。但是,我遇到了问题。我尝试过的事情:
没有用于
split
对结果文件执行任何命令的命令。所以我必须用手做。**
使用将文件移动到目录中find . -name "xaa*" -exec mv {} aa \+
不起作用,因为{}
不在行尾。-t
用于反转源和目标的标志在我的 Unix 版本中不可用。我必须将
find
into的输出通过管道传输xargs
,才能正常工作。
然而,这太慢了——文件的创建速度比它们的移动速度快得多。
我怀疑
xargs
一次处理的文件比使用\+
after 少find -exec
。我尝试添加一个“-R 6000”标志,以便一次运行 6000 个条目;但是,我认为这没有什么区别。我将 的优先级降低
split
到尽可能低。它消耗的 CPU 量没有变化,所以可能也没有影响。我打开最多七个命令提示符来运行
mv
命令(每个命令提示符最后四个字母)——但是,这仍然不够。我会打开更多,但是一旦系统达到七个,响应就太慢了,我不得不停止分裂。ls -l | tail
例如,在等待命令返回某些内容时,源存档会被复制到 USB 。
split
所以我一直在做的是,在此时停止,等待mv
命令赶上,然后重新启动分割。那时我会用来
find -exec rm {} \+
删除我已经拥有的文件;这有点快,所以当它到达我没有的文件时,周围的文件就会减少。
因此,第一次此类迭代持续了约 300 万个文件,下一个约 200 万个文件,下一个约 1.5 个文件。不过,我确信应该有更好的方法。还有什么想法可以尝试吗?