我的处境很尴尬。我使用的是具有 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