加速几个文件夹上的GNU查找

时间:2016-02-08 14:28:54

标签: linux bash gnu-coreutils

在Linux 64位CentOS服务器上,我在几个文件夹上运行GNU find命令,每个文件夹都包含一个类似的子文件夹结构。结构是:

/my/group/folder/project_123/project_123-12345678/*/*file_pattern_at_this_level*
/my/group/folder/project_234/project_234-23456789/*/*file_pattern_at_this_level*

文件夹星号/*/表示每个项目文件夹中都有一堆子文件夹,名称各不相同。

我尝试添加最终的星号,然后将find命令限制为某个-mindepth N-maxdepth N

find $folder1 $folder2 $folder3 -mindepth 1 -maxdepth 1 -name "*file_pattern*"

但测试是在具有其他正在运行的作业的服务器节点上进行的,因此很难获得公平的性能比较,这主要是由于在第一个命令之后发生了一定程度的缓存,这使得第一个命令类型慢,第二等效类型更快。

这是一个多核节点,那么我还可以尝试更快地制作这类命令吗?

1 个答案:

答案 0 :(得分:2)

“实际上像find和grep这样的命令几乎总是受IO限制:磁盘是瓶颈,而不是CPU。在这种情况下,如果并行运行多个实例,它们将竞争I / O带宽和缓存,所以他们会慢一些。“ - https://unix.stackexchange.com/a/111409

不要担心“找到”文件,担心你需要做些什么。为此,您可以与“parallel”或“xargs”并行化。

如果您仍想继续这样做,您仍然可以尝试将“并行”与find一起使用,并传递目录列表。这将导致并行产生一堆查找进程(-j选项设置将同时运行多少“线程”)来处理“队列”。在这种情况下,您需要将std设置为文件,因此您可以稍后查看输出,具体取决于您的使用情况。