Sắp tới trong một hơi muộn về điều này, có một vấn đề tương tự và đã có thể r sử dụng;
zcat -r /some/dir/here | grep "blah"
Được nêu chi tiết tại đây;
http://manpages.ubuntu.com/manpages/quantal/man1/gzip.1.html
Tuy nhiên, điều này không hiển thị các tập tin ban đầu mà kết quả phù hợp từ, thay vì hiển thị "(standard input)" như nó đến từ một đường ống. zcat dường như không hỗ trợ xuất một tên hoặc.
Xét về hiệu suất, đây là những gì chúng tôi có;
$ alias dropcache="sync && echo 3 > /proc/sys/vm/drop_caches"
$ find 09/01 | wc -l
4208
$ du -chs 09/01
24M
$ dropcache; time zcat -r 09/01 > /dev/null
real 0m3.561s
$ dropcache; time find 09/01 -iname '*.txt.gz' -exec zcat '{}' \; > /dev/null
0m38.041s
Như bạn thấy, sử dụng phương pháp find|zcat
là chậm hơn so với sử dụng zcat -r
khi giao dịch với ngay cả một khối lượng nhỏ các tập tin đáng kể. Tôi cũng không thể tạo đầu ra zcat tên tệp (sử dụng -v
dường như sẽ xuất tên tệp, nhưng không xuất hiện trên mỗi dòng đơn). Có vẻ như hiện tại không có công cụ nào cung cấp cả tính nhất quán về tốc độ và tên với grep (tức là tùy chọn -H
).
Nếu bạn cần xác định tên của tệp mà kết quả thuộc về, thì bạn sẽ cần phải viết công cụ của riêng bạn (có thể được thực hiện trong 50 dòng mã Python) hoặc sử dụng phương thức chậm hơn. Nếu bạn không cần phải xác định tên, hãy sử dụng zcat -r
.
Hy vọng điều này sẽ giúp
FWIW, zgrep của tôi không hỗ trợ -R – ZombieDev
@Ned Batchelder, Cảm ơn đã đưa ra một hướng. Nhưng đối với tôi sau đây làm việc zgrep tùy chọn "mẫu" tập tin – hiren
'zgrep -R --include = \ *. Gz -H" mẫu "' trên zsh – blacktooth