У меня есть десятки папок, которые содержат как простые текстовые файлы журнала, так и сжатые старые журналы. Моя цель - запустить только один вкладыш (по одной папке за раз), чтобы получить все результаты grep в соответствии с порядком отметок времени, независимо от того, является ли файл журнала, содержащий совпадение, txt или gz, и, если возможно, оптимизировать производительность.
Это прекрасно работает для простых файлов:
ls -rt log.*.txt | xargs grep <treasure> -
Я использую это, а не просто grep, поэтому результаты сортируются в хронологическом порядке создания файла, возможно, в течение нескольких дней, а не сортируются по имени файла. Имена файлов (лог.# .txt) увеличиваться до определенного целочисленного предела, затем переходить к log.0.txt, но это может пересечь 24-часовую отметку или нет.
После переноса txt-файлов старые файлы распаковываются: log.# .Archive.gz. Сохраняются только файлы gz с целочисленным ограничением.
Я думал использовать оператор if/fi для grep или zgrep в зависимости от расширения текущего файла. Однако, мой первый шаг, чтобы попробовать это только на файлах gz, не работал:
ls -rt log.*.gz | xargs zgrep <treasure> -
Я получаю кучу ошибок "файл 'сокровище' не найден" (по одной на каждый файл .gz)
Я также пытался
ls -rt "log.*.gz" | xargs -0 zgrep <treasure> -
к тому же результату. Я знал, что это должно быть из-за моего элементарного понимания команды xargs. Может быть, я даже смогу сделать это с помощью соответствующих опций grep/zgrep, find или чего-то еще.