Linux 优化单行find+exec命令

Linux 优化单行find+exec命令,linux,performance,shell,unix,find,Linux,Performance,Shell,Unix,Find,我需要获得系统上大约1M+个文件的文件信息名称、大小、修改日期。 我当前使用的命令是: sudo find "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" -type f -exec ls -lT {} + 有没有办法改善这一点?唯一的要求是我必须获得上述卷中的所有文件,并且对于每个文件,提取名称、大小和修改日期 有没有办法在这里执行stat命令?这会加快速度吗 这在光纤连接的机器上大约需要一个小时。您可以使用find的内置打印功能,而不是将打印输出

我需要获得系统上大约1M+个文件的文件信息名称、大小、修改日期。 我当前使用的命令是:

sudo find "$FULFILLMENT" "$ARCH1" "$ARCH2" "$MASTERING" -type f -exec ls -lT {} +
有没有办法改善这一点?唯一的要求是我必须获得上述卷中的所有文件,并且对于每个文件,提取名称、大小和修改日期

有没有办法在这里执行stat命令?这会加快速度吗


这在光纤连接的机器上大约需要一个小时。

您可以使用find的内置打印功能,而不是将打印输出到ls:

sudo find ... -type f -printf '%p      %s      %t\n'
我不确定这会快多少,但它节省了向ls的分叉,也节省了通过ls检索信息的第二次查询磁盘的时间,因此find至少应该快一些


顺便说一句,您可以搜索manfind-printf以获得关于这些格式字符串的更多信息。特别是,您可以自定义上次修改时间的显示方式,并且可以为其他字段指定显式字段宽度。

您可以使用find的内置打印,而不是将打印输出到ls:

sudo find ... -type f -printf '%p      %s      %t\n'
我不确定这会快多少,但它节省了向ls的分叉,也节省了通过ls检索信息的第二次查询磁盘的时间,因此find至少应该快一些


顺便说一句,您可以搜索manfind-printf以获得关于这些格式字符串的更多信息。特别是,您可以自定义上次修改时间的表示方式,并且可以为其他字段指定显式字段宽度。

使用+将接近最佳值。您可以将xargs配置为一次运行的文件比find运行的文件多,从而减少ls的整体调用,但这可能是一种二阶效应。我听说在管道中使用xargs比在find中使用-exec开关更有效。@David:对于-exec…“;”它分别为每个文件运行命令,但我怀疑xargs比-exec…“+”有多大改进一次运行多个文件。后者是非标准的,但是OP已经在使用它了,所以很明显它可以在他的系统上使用。与xargs方法不同,它不会破坏包含空格的文件名。@ruakh你失去了我-这是非标准的?顺便说一句-我相信你也知道,对于空白问题有一个众所周知的解决方案。@David:-exec…+每个--exec有许多文件是非标准的。你是对的,有一个解决空白问题的解决方案,但是这个解决方案也是非标准的,我不认为它比-exec…+得到更广泛的支持。所以它并没有什么值得推荐的地方。有了+之后,这将接近最优。您可以将xargs配置为一次运行的文件比find运行的文件多,从而减少ls的整体调用,但这可能是一种二阶效应。我听说在管道中使用xargs比在find中使用-exec开关更有效。@David:对于-exec…“;”它分别为每个文件运行命令,但我怀疑xargs比-exec…“+”有多大改进一次运行多个文件。后者是非标准的,但是OP已经在使用它了,所以很明显它可以在他的系统上使用。与xargs方法不同,它不会破坏包含空格的文件名。@ruakh你失去了我-这是非标准的?顺便说一句-我相信你也知道,对于空白问题有一个众所周知的解决方案。@David:-exec…+每个--exec有许多文件是非标准的。你是对的,有一个解决空白问题的解决方案,但是这个解决方案也是非标准的,我不认为它比-exec…+得到更广泛的支持。所以我觉得没有什么好推荐的。