![grep 向后递归](https://linux22.com/image/115930/grep%20%E5%90%91%E5%90%8E%E9%80%92%E5%BD%92.png)
我如何向后递归地 grep 。假设我有以下文件夹:
20170808
20170809
20170810
当我执行grep -ri 'string'
grep 时,它会按字母顺序获取每个文件夹并搜索“字符串”。我如何让它从最后一个文件夹向后搜索到第一个文件夹?
答案1
的顺序grep -r
通常是随机的(不一定按字母顺序),通常基于文件在目录中的排列方式以及您的grep
实现可能进行的重新排序以优化目录遍历。
这里,使用 GNU grep
2.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.gz
、access.log.1
、access.log
):
zgrep something access.log*(nOn)
(尽管您也可以按最后修改时间如果zgrep something access.log*(Om)
这些可以信赖)。