Seguir un archivo nuevo con un nombre antiguo

Seguir un archivo nuevo con un nombre antiguo

Esto va en la línea deCómo empezar a seguir un archivo que aún no se ha creadocon un giro: ya existe un archivo con el nombre.

Tengo un programa que se ejecuta varias veces; cuando el nombre del archivo de salida ya está en uso, cambia el nombre del archivo existente insertándolo _XYZantes de la extensión del archivo donde XYZestá el número entero más pequeño (p.ej, output.outse convierte en output_001.out, o output_002.outsi output_001.outya existe, etc.) y crea un nuevo archivo de salida con el nombre principal.

Si sigo el nombre principal, incluso con -F, comienza a seguir el archivo existente inmediatamente y conserva el identificador de ese inodo incluso cuando se cambia el nombre del archivo, ignorando el nuevo archivo.

El programa se ejecuta en un clúster compartido con gestión de colas, por lo que la ejecución comienza con retrasos largos y variables.

¿Es posible incluso seguir el nuevo archivo sin esperar a que se cree primero? ¿Si es así, cómo?

Respuesta1

tail -Fya debería hacer esto.

Crea un vacío /tmp/t/file. Luego, en la terminal 1, inicie tail -Fy déjelo funcionando:

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

En la terminal 2, hice:

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

Como puede ver, tail -Fde hecho sigue al nombre, no al inodo. ¿Quizás estás usando un tailsignificado diferente -F(esa bandera es una extensión BSD, copiada más tarde por GNU también), o tu versión tiene errores? También puedes probar tail --follow=name --retry(sintaxis alternativa de cola GNU) o xtail(que sigue un directorio completo).

información relacionada