【发布时间】:2013-01-13 17:42:54
【问题描述】:
我需要获取系统上大约 1M+ 个文件的文件信息(名称、大小、修改日期)。 我目前使用的命令是:
sudo find "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" -type f -exec ls -lT {} +
有没有办法改善这种情况?唯一的要求是我必须获取上述卷中的所有文件,并为每个文件提取名称、大小和 date_modified。
(有没有办法在这里执行 stat 命令?这会加快速度吗?)
这在光纤连接的机器上大约需要一个小时。
【问题讨论】:
-
有了
+,这将接近最佳状态。您可以将xargs配置为一次运行比find运行的文件更多的外部机会(以减少对ls的整体调用),但这可能是二阶效应。 -
我听说在管道中使用
xargs比在find中使用-exec开关更有效。 -
@David:
-exec ... ';'绝对是这样(它为每个文件单独运行命令),但我怀疑xargs比-exec ... '+'有很大的改进(它运行许多文件一次)。后者是非标准的,但 OP 已经在使用它,所以显然它在他的系统上可用。与xargs方法不同,它不会在包含空格的文件名上中断。 -
@ruakh 你把我弄丢了——这是非标准的吗?顺便说一句 - 我相信你知道,空白问题有一个众所周知的解决方案。
-
@David:
-exec ... +(many-files-per--exec) 是非标准的。你是对的,有一个空白问题的解决方案,但该解决方案也是非标准的,我认为它没有比-exec ... +得到更广泛的支持。所以没有太多推荐恕我直言。
标签: linux performance shell unix find