Чтобы удалить завершающую новую строку, просто используйте выполнение команды:
$ echo "test$(seq -s '' 9)no-newline"
test12345679no-newline
Или записать в переменную:
$ var=$(seq -s '' 9); echo "${var}0${var}"
1234567890123456789
Или также:
$ printf '%s' {{0..9},0,{0..9}}; echo
1234567890123456789
Ответ Камила указал мне правильное направление, то есть использование жестких ссылок и tail -F
.
Я выбрал следующее решение:
watch
re -периодически создавайте жесткую ссылку на последний файл:watch -n 300 'ln -f $(find. | sort --reverse | head -n1)./latest.json'
tail -F
для непрерывного просмотра последней строки жестко связанного файла:tail -F latest.json | jq '.text'
Если вы хотите просмотреть все файлы в текущем каталоге, используйте эту конструкцию:
ls | cat - <(inotifywait -m --format '%f' -e create. ) | while read file ; do tail -v -f "$file" & done
Обратите внимание, что он не поддерживает наличие подкаталогов в отслеживаемом каталоге.
В этом решении используется tail -F
(, т.е. tail --follow=name --retry
), который не является переносимым. Протестировано с помощью GNU tail
.
Выполните следующие действия:
Создать monitored
как обычный файл:
: >>monitored
Периодически проверяйте наличие файла file*.json
новее, чем monitored
. Если это так, замените monitored
жесткой ссылкой на файл :
while sleep 1; do
find. \( -name. -o -prune \) -name 'file*.json' -newer monitored -exec ln -f {} monitored \;
done
Описанный выше цикл может выполняться в фоновом режиме.
Отслеживайте monitored
, следуя его имени:
tail -F monitored
Вы можете подключиться к jq '.text'
или как-то еще.
Примечания:
Ваш явный вопрос:
How can I continuously concatenate all files in a folder, such that I can always see the latest rows of the newest file?
Мое решение не "непрерывно объединяется". Однако это позволяет вам «видеть последние строки самого нового файла».
Если бы в одну и ту же секунду было создано/обновлено много файлов file*.json
, то не было бы никакой гарантии, что каждый из них отображается как monitored
, хотя бы на мгновение некоторые из них можно было бы пропустить. Однако я понимаю, что ваш скрипт иногда дает сбой и автоматически перезапускается, поэтому, вероятно, от одного перезапуска к другому требуется более одной секунды. Тогда нет проблем.
В общем проблема может быть. Я четко заявляю, что решение не является полностью надежным, когда статус «самый новый файл» слишком часто переходит от файла к файлу.