O sinalizador de nova tentativa do comando tail não funciona com curingas?

O sinalizador de nova tentativa do comando tail não funciona com curingas?

Quero seguir vários nomes de diretórios desconhecidos contendo um arquivo inexistente específico, por exemplo:

tail -F /tmp/*/app.log

No entanto, isso não funciona como esperado com o curinga: se eu criar um arquivo com esse caminho, tailnão começarei a seguir a menos que eu reinicie o comando. Por outro lado, se eu executar:

tail -F /tmp/example/app.log

assim que o arquivo aparecer, o comando irá gerar:tail: '/tmp/example/app.log' has appeared; following new file

Eu tentei a -f filename --retrycombinação em vez de -Fe o resultado é o mesmo.

Como isso pode ser resolvido e existem outras maneiras de atingir o mesmo objetivo?

Responder1

/tmp/*/app.logserá expandido pelo shell (BASH, presumo). Se existirem correspondências, então isso será expandido para essas correspondências e depois passado como argumentos paratail

$ find /tmp/test -type f
/tmp/test/a/app.log                                                                                                                                                                                                                                
/tmp/test/b/app.log                  

$ echo /tmp/test/*/app.log                                                                                                                                                                                        
/tmp/test/a/app.log /tmp/test/b/app.log

Portanto, no caso acima, tailseria configurado para seguir especificamente app.login ae app.login b. Se, no momento em que foi iniciado, app.lognão bexistisse, não seria seguido. Se novos diretórios ou arquivos forem criados, ele também não os seguirá.

No caso de não haver correspondências, a string não expandida será passada como argumento paratail

$ echo /tmp/test/*/app2.log                                                                                                                                                                                     
/tmp/test/*/app2.log               

Então, ele tentará seguir o literal pathname/filename /tmp/test/*/app2.log, que provavelmente nunca existirá (ou se existir, foi criado de uma maneira muito estranha porque ter *um nome de diretório não é algo que eu recomendaria fazer em circunstâncias normais) .

informação relacionada