在 RHEL-7 中处理包含数百万个文件的文件夹的最佳方法是什么?

在 RHEL-7 中处理包含数百万个文件的文件夹的最佳方法是什么?

我的处境很尴尬。我使用的是具有 62 GB RAM 的 RHEL-7 计算机。在这台机器上,我有几个文件夹,其中有大约 800 万个文件。

不幸的是,我发现很难处理这个文件夹。我发现执行列出文件等基本操作非常慢。

举个例子,ls -l ~/large_directory | head -5需要很长时间。

复制命令的问题更严重,我必须将文件从该文件夹复制到另一个文件夹。通常的复制命令cp ~/large_directory/*.js /processing_directory/也不起作用。我想我必须使用xargs或类似的东西。

任何评论表示赞赏。

答案1

阅读man find xargs cp并做类似的事情

find ~/bigdir -type f -name '*.js' -print0 | \
    xargs -0 -r echo cp --target-directory=~/destination

echo当您对结果感到满意时,删除“ ”。

答案2

在这种情况下,我相信 Midnight Commander 是一个可以帮助您更加舒适地工作的工具。它使用流来列出文件,就像 less 一样,因此理论上它会尽可能具有良好的性能。

它还提供“过滤”功能,因此可以在复制任何文件之前使用它。它将使您的文件更容易可视化,因此无需一遍又一遍地列出文件。另外,通过查看/编辑功能,您将能够打开文件并编辑文件,而无需再次列出文件夹。

答案3

只是把这个扔在那里......

shell 脚本执行类似操作有什么问题

tar -cf newdir/a/a.tar /hugedir/a*
tar -cf newdir/b/b.tar hugedir/b*

或者,类似的东西,

cd hugedir/
mkdir a
mkdir b
ln -s a* ./a/
ln -s b* ./b/

还有一个想法可能是使用一种语言,python 或 bash,它可以通过逻辑列表/循环或比较逻辑(无论该语言碰巧支持和创建什么),这些逻辑将按磁盘顺序作用于每个文件,而不是排序的顺序。是的,脚本方法将访问每个文件,这将花费很长时间,但它只会执行一次。

由于文件数量如此之多,必须有一种非常简单的方法将其分类为更小的块以供使用。

就我个人而言,我很好奇这些文件是什么,而且我相信很多其他人也想知道。

答案4

cpio直通模式非常高效,并且一度在包含大量文件的大型目录树中流行。

$ find /bigdatadir -print | cpio -pdm /newbigdatadir

相关内容