grep 向后递归

grep 向后递归

我如何向后递归地 grep 。假设我有以下文件夹:

20170808
20170809
20170810

当我执行grep -ri 'string'grep 时,它会按字母顺序获取每个文件夹并搜索“字符串”。我如何让它从最后一个文件夹向后搜索到第一个文件夹?

答案1

的顺序grep -r通常是随机的(不一定按字母顺序),通常基于文件在目录中的排列方式以及您的grep实现可能进行的重新排序以优化目录遍历。

这里,使用 GNU grep2.25:

$ grep -r . .
./4/c:c
./1/b:b
./2/a:a
./10/d:d

如果您想要特定的顺序,则必须放弃-r并按照您想要的顺序将文件列表作为参数提供。

例如,在您的情况下,并使用zsh

$ grep -H . ./**/*(D.On)
./4/c:c
./2/a:a
./1/b:b
./10/d:d

这里使用On逆序按名字。您可以添加n数字排序的限定符:

$ grep -H . ./**/*(D.nOn)
./10/d:d
./4/c:c
./2/a:a
./1/b:b

-H作为另一个 GNUgrep扩展,确保即使只有一个文件也始终打印文件名。使用其他grep实现,您可以添加一个额外的空文件作为参数,例如/dev/null确保grep传递至少两个文件名)。

这也非常有用zgrep 旋转的按时间顺序排列的日志文件(如access.log.10.gz... access.log.2.gzaccess.log.1access.log):

zgrep something access.log*(nOn)

(尽管您也可以按最后修改时间如果zgrep something access.log*(Om)这些可以信赖)。

相关内容