Какие критерии вы используете, чтобы решить, какие строки оставить?
1
Один из распространенных фильтров - просто хранить stderr.
cmdlist 2>logfile # stdout still to console
2
Для более сложного фильтра, если вы указали c шаблоны, которые вы хотите сохранить в журнал, вы можете использовать sed
. Вот упрощенный пример c -
seq 1 100 | sed '/.*[37]$/w tmplog'
Это сгенерирует числа от 1 до 100 и отправит их все на консоль, но захватит все числа, которые заканчиваются на 3
или от 7
до * 1016. *. Он также может принимать более сложные списки команд, чтобы помочь вам быть более исчерпывающими -
seq 1 100 | sed '/.*[37]$/w 37.log
/^2/w 37.log'
c .f. sed
руководство для более подробной разбивки.
Возможно, вам также требуется вывод ошибок, поэтому было бы неплохо сохранить и его.
seq 1 100 2>errlog | sed '/.*[37]$/w patlog'
3
Для более сложного плана экономии места создайте именованный канал и сожмите журнал из него в фоновом процессе.
$: mkfifo transfer # creates a queue file on disk that
$: gzip < transfer > log.gz & # reads from FIFO in bg, compresses to log
$: seq 1 100 2>&1 | tee transfer # tee writes one copy to stdout, one to file
Это покажет весь вывод, как он есть, но также дублируйте копию в именованный канал; gzip
будет читать его из именованного канала и сжимать его.
3b
Вы можете заменить tee
на sed
для уменьшения пространства вдвое, если требуется -
$: mkfifo transfer
$: gzip < transfer > log.gz &
$: seq 1 100 2>&1 | sed '/.*[37]$/w transfer'
Я не рекомендую это делать, так как вы можете отфильтровать то, что не понимали, что вам понадобится.