Ubuntu

尾命令重試標誌不適用於萬用字元?

  • August 5, 2021

我想跟踪一堆包含特定不存在文件的未知目錄名稱,例如:

tail -F /tmp/*/app.log

但是,萬用字元不能按預期工作:如果我使用該路徑創建文件,tail除非我重新啟動命令,否則不會開始跟踪。另一方面,如果我執行:

tail -F /tmp/example/app.log

文件一出現,命令就會輸出:tail: '/tmp/example/app.log' has appeared; following new file

我已經嘗試過-f filename --retry組合而不是-F結果是一樣的。

如何解決這個問題,還有其他方法可以實現相同的目標嗎?

/tmp/*/app.log將由外殼擴展(我認為是 BASH)。如果存在匹配項,那麼這將擴展為這些匹配項,然後作為參數傳遞給tail

$ 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

因此,在上述情況下,tail將被配置為專門遵循app.loginaapp.login b。如果在它開始app.logb時候不存在,它就不會被遵循。如果創建了新目錄或文件,它也不會跟隨它們。

在沒有匹配的情況下,未擴展的字元串將作為參數傳遞給tail

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

因此,它將嘗試遵循/tmp/test/*/app2.log可能永遠不會存在的文字 pathname/filename (或者如果它確實存在,它是以一種非常奇怪的方式創建的,因為*在正常情況下我不建議將其作為目錄名稱) .

引用自:https://serverfault.com/questions/1073642