我需要搜索gzip压缩文件的文件夹中的字符串,但是我需要从每个文件的底部开始搜索。然后,当它有10个匹配项时,我需要该命令返回结果。
到目前为止,我有这个:
find '/tmp/myfiles/' -type f \( -iname '*.txt' -o -iname '*.gz' \) -exec zcat -f {} \+ 2>&1 | tac | zgrep -ish 'foobar' | tail -n +1 | head -n 10
我正在使用zcat
获取所有文件内容,然后使用tac
对其进行反转。这比这要慢得多:
find '/tmp/myfiles/' -type f \( -iname '*.txt' -o -iname '*.gz' \) -exec zgrep -ish 'foobar' {} \+ 2>&1 | tail -n +1 | head -n 10
但是这只从文件的顶部读取,我想一种反向搜索的方法,而不必先读取完整的文件...
答案 0 :(得分:1)
无法避免读取文件的开头。但是,仅反转整个文件以获取最后的匹配显然比仅反转匹配要慢得多(当然,除非每一行都包含一个匹配项)。也许尝试一下;
find '/tmp/myfiles/' -type f \( -iname '*.txt' -o -iname '*.gz' \) -exec zgrep -ish 'foobar' {} \+ 2>&1 | tac | head -n 10