如何限制 Unix 查找结果数以处理包含多个文件的目录

lem*_*dit 10 unix find

有没有办法限制 unix 系统上 find 命令返回的结果数量?

由于某些目录中的文件数量异常多,我们遇到了性能问题。

我正在尝试执行以下操作:

find /some/log -type f -name *.log -exec rm {} ; | limit 5000
Run Code Online (Sandbox Code Playgroud)

amp*_*ine 30

你可以尝试类似的东西find [...] |head -[NUMBER]。这将在输出其多行时发送一个SIGPIPEto findhead以便find不会继续搜索。

  • 不使用 -exec rm,只需按照建议将 find 的结果通过管道传送到 head,然后将结果通过管道传送到 xargs 和 rm。 (6认同)

bla*_*lah 6

听起来您正在寻找xargs,但还不知道。

find /some/log/dir -type f -name "*.log" | xargs rm
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用 find 的 `-delete` 标志代替 `-exec rm...` 或 `xargs rm`。 (13认同)
  • 请注意,`find ...|xargs` 是*危险的*,因为如果某些文件名包含有趣的字符,它会做有趣/奇怪/灾难性的事情。总是使用`find ... -print0 | xargs -0`(我相信是 GNU 扩展)。 (10认同)
  • `-exec rm {} +` 可以在没有开销的情况下做同样的事情。虽然你可以将 `head` 添加到管道链中: `find [...] | 头-5000 | xargs rm` (4认同)