如何限制 ag 搜索的文件的大小?

如何限制 ag 搜索的文件的大小?

我不想要股份公司搜索大于 2Mio 的文件。

我找不到像 ag 命令的 --file-size 标志这样的东西,但是有什么方法可以告诉它吗?

我得到很多

ERR: Skipping foo.bar: pcre_exec() can't handle files larger than 2147483647 bytes.

答案1

如果将zsh, 与任何命令一起使用,而不仅仅是ag,您可以执行以下操作:

ag -- pattern **/*(.LM-3)

要查看(递归地**/)常规文件 ( .) 大小为 2 MiBL或更小的文件(其L长度四舍五入为整数Mebi 字节,严格小于 ( -) 3)。

这会排除隐藏文件,但在 的情况下ag,与 files 和 co 匹配的文件.ignore在按字面传递时不会被排除。

在 GNU 系统上的 bash 或其他类似 Korn 的 shell 中,您始终可以使用执行以下操作的函数或脚本:

ag_in_small_non_hidden_files() {
  xargs -r0a <(
    LC_ALL=C find . -name '.?*' -prune -o -type f -size -3M -print0
  ) ag "$@"
}

执行等效操作(文件列表未排序,但ag默认情况下不会再次对文件列表进行排序,如果您想要排序列表,您始终可以通过管道将find输出传递到)。sort -z

答案2

您可以对 2GiB 及以上的文件进行预扫描,并将它们写入.ignore您正在搜索的目录结构中。

例如

find . -size "+$(( 2 * 1024 * 1024 * 1024 - 1 ))c" > .ignore

警告适用于路径中包含换行符、通配符、反斜杠、引号或尾随空格等棘手字符的文件。

对于严格大于 2MiB 的文件,使用find包括 GNU 在内的某些实现find,您可以使用find . -size +2M,它匹配大小向上舍入到整数兆字节且严格大于 2 的文件,因此文件大小为 2097153(向上舍入到 3MiB)及以上。请注意,-size -2M报告的文件大小为 1MiB 或更小。

相关内容