Tail -f прерывается при усечении файла

Использование awk:

awk -F'[(),]' '{ printf( "(%d %d)\n", $2 * 10000, $3 * 10000 ); }' file
2
10.05.2017, 19:25
4 ответа

Как указывали другие, команда tail, поставляемая с OS X, не имеет опции --retry. Однако вы можете просто установить версию tail для GNU, которая имеет эту опцию; это часть GNU coreutils. Например, если вы используете порты MacPort, вы можете установить их, запустив sudo port install coreutils.

Альтернативой просмотру файла в реальном времени является команда watch, которая, к сожалению, также не поставляется с OS X. Однако вы можете использовать этот простой обходной путь.

5
27.01.2020, 21:56

Следующая команда продолжает повторять попытку файла, даже если он удален или недоступен. Он снова распечатает содержимое после его создания.

tail -F filename --retry
-2
27.01.2020, 21:56

Вот скрипт tail-F. Он принимает единственный аргумент — файл для хвоста. Вероятно, есть лучшие варианты (например, установка GNU tail), но здесь мы демонстрируем, что простые версии инструментов часто можно собрать из доступных частей.

#!/bin/bash
#
file="$1"
size=$(stat -c '%s' "$file" 2>/dev/null)
test -z "$size" && echo "No file '$file'" >&2

while sleep 1
do
    n_size=$(stat -c '%s' "$file" 2>/dev/null)

    if [[ -n "$n_size" ]]
    then
        if [[ 0 == "$size" ]]
        then
            # Output whole file (so far)
            dd bs=1K if="$file" 2>/dev/null
            size="$n_size"

        elif [[ "$n_size" > "${size:-0}" ]]
        then
            # Output new part of file
            dd bs="$size" skip=1 if="$file" 2>/dev/null
            size="$n_size"

        elif [[ -z "$size" ]]
        then
            echo "New file '$file'" >&2
            size=0

        elif [[ "$n_size" < "${size:-0}" ]]
        then
            echo "Rewinding file '$file'" >&2
            size=0
        fi
    fi
done
1
27.01.2020, 21:56

Используйтеtail --f=name

Значение по умолчанию для флага -fdescriptor. Изменив его на имя, tailбудет следовать за именем файла и будет продолжать отображаться даже после того, как файл будет усечен.

ПС. Вы все равно получите сообщениеtail: File truncated

-1
27.01.2020, 21:56

Теги

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