Отслеживание нового файла со старым именем

Отслеживание нового файла со старым именем

Это в духеКак начать отслеживать файл, который еще не созданс изюминкой: файл с таким именем уже существует.

У меня есть программа, которая запускается несколько раз; когда имя выходного файла уже используется, она переименовывает существующий файл, вставляя _XYZперед расширением файла, где XYZ— наименьшее целое число (например, output.outстановится output_001.out, или output_002.outесли output_001.outуже существует, и т. д.) и создает новый выходной файл с основным именем.

Если я добавлю в конец первичного имени, даже с помощью -F, он немедленно начнет добавлять в конец существующий файл и сохранит дескриптор этого inode даже при переименовании файла, игнорируя новый файл.

Программа запускается на общем кластере с управлением очередями, поэтому выполнение начинается с длительными и переменными задержками.

Возможно ли вообще отслеживать новый файл, не дожидаясь его создания? Если да, то как?

решение1

tail -Fуже должны это сделать.

Создайте пустой /tmp/t/file. Затем в терминале 1 запустите tail -F, и оставьте его работать:

anthony@Zia:~$ tail -F /tmp/t/file
a
b
tail: `/tmp/t/file' has become inaccessible: No such file or directory
tail: `/tmp/t/file' has appeared;  following end of new file
c
d

В терминале 2 я сделал:

anthony@Zia:/tmp/t$ echo a >> file
anthony@Zia:/tmp/t$ echo b >> file
anthony@Zia:/tmp/t$ mv -i file file.old; echo c >> file
anthony@Zia:/tmp/t$ echo d >> file

Как вы можете видеть, tail -Fдействительно следует за именем, а не за inode. Может быть, вы используете , tailкоторый придает другое значение -F(этот флаг является расширением BSD, позже скопированным GNU), или ваша версия глючная? Вы также можете попробовать tail --follow=name --retry(альтернативный синтаксис GNU tail) или xtail(который следует за целым каталогом).

Связанный контент