【问题标题】:Faster iteration over thousands of files对数千个文件进行更快的迭代
【发布时间】:2015-05-09 09:40:33
【问题描述】:

我正在尝试对单个文件夹中的约 200,000 个文件进行处理。

当我这样做时:

for i in *; do /bin/echo -n "."; done

每隔几秒打印一个点。对包含一百个文件的文件夹执行相同操作的速度非常快。

为什么会这样?如何加快处理数千个文件的文件夹?

【问题讨论】:

  • 创建一个线程进程及时做到这一点
  • 瓶颈可能是你的文件系统,而不是shell。如果您可以使用 btrfs 创建一个临时 ramdisk 并将文件移动到那里(或者只是符号链接?)您可能会获得更好的性能。当然,首先要消除任何明显的复杂性(Windows 挂载?NFS?FUSE?)
  • 这是一个相当强大的带有 NFS 的 Linux,但我认为你是对的,文件系统减慢了这一速度。感谢您的评论。
  • 每次调用/bin/echo 时,您都会开始一个新进程。请改用 shell 内置 echo,或 printf 内置。

标签: bash shell unix glob


【解决方案1】:

用 GNU find 试试这个:

find . -maxdepth 1 -type f -printf "."

【讨论】:

  • 好主意,它奏效了。为了清楚起见,我的“打印点”是一种简化,但实际上我使用了 xargs 并对文件进行了更高级的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 2011-01-20
相关资源
最近更新 更多