Próbuję utworzyć skrypt dla plików logów znajdujących się w/var/log /. Jestem w stanie albo odzyskać nieskompresowane logi, albo skompresowane logi (w wyniku rotacji logów), ale nie udało mi się wykonać obu w jednym poleceniu (gdy próbuję to zrobić, otrzymuję "plik binarny (standardowe wejście)"), czy można zrobić coś takiego? dzięki!Czy mogę pomieszać zarówno skompresowane pliki, jak i nieskompresowane pliki, używając tego samego polecenia:
Odpowiedz
spróbować zrobić to za pomocą shell funkcję:
greplog() {
cd /var/log
{
cat $1 $1.*[0-9]
zcat $1.*.gz
} | grep "$2"
}
Zastosowanie:
$ greplog syslog pattern
działało idealnie, dzięki! – lacrosse1991
Aby być spójnym z grep i innymi, czy nie byłoby lepiej mieć "syslog" typu greplog? – hbogert
zgrep
może zrobić dla ciebie, obsługuje zarówno pliki skompresowane i nieskompresowane. Jedną wadą jest to, że nie może traktować katalogów rekursywnie. Ale w przypadku Twojej instancji jest w pełni wystarczająca i możesz filtrować np. syslog następująco:
$ zgrep PATTERN /var/log/syslog*
xzgrep
jest one stop shop dla powszechnie skompresowanych plików, przynajmniej na Ubuntu 10.12 16 i MacOS (zainstalowany z XZ od DarwinPorts). Od strony man: xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), or bzip2(1)
.
Usage (uwaga -r nie jest obsługiwany):
$ find . -type f | parallel -j4 'xzgrep -Hn "PATTERN" {}'
@StevenPenny .gz i tak na przykład syslog, syslog.1, syslog.2.gz, syslog.3.gz i tak dalej – lacrosse1991