Почему `ls | xargs wc -l` отформатировать красиво?

Основываясь на ответе @Ryan, следующее позволит получить все «свернутые» файлы, отсортированные по алфавиту, затем получить текущий файл, распаковать их, если необходимо, и lessих:

cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less

или, если вы хотите получить их все как непрерывный поток, вы можете tailих и, при желании, передать другому процессу

cat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)

Я должен отметить, что это предназначено для журналов, которые ежедневно ротируются с датой, добавленной в конец файла. Если ваши журналы используют другой формат, вам придется изменить первую часть оператора cat, чтобы приспособиться к нему.

0
05.01.2020, 16:23
1 ответ

По умолчанию xargsбудет передавать столько параметров в одной командной строке, сколько может -обычно до предела оболочки в (IIRC )256 символов. Таким образом, используемая вами команда ls | xargs wc -lфункционально эквивалентна wc -l *. Я полагаю, что вы ожидаете, что xargsзапустит wcодин раз для каждого файла, что можно создать, добавив параметр -n, ls | xargs -n 1 wc -l.

5
28.01.2020, 02:21

Теги

Похожие вопросы