Ubuntu
尾命令重試標誌不適用於萬用字元?
我想跟踪一堆包含特定不存在文件的未知目錄名稱,例如:
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.log
ina
和app.log
inb
。如果在它開始app.log
的b
時候不存在,它就不會被遵循。如果創建了新目錄或文件,它也不會跟隨它們。在沒有匹配的情況下,未擴展的字元串將作為參數傳遞給
tail
$ echo /tmp/test/*/app2.log /tmp/test/*/app2.log
因此,它將嘗試遵循
/tmp/test/*/app2.log
可能永遠不會存在的文字 pathname/filename (或者如果它確實存在,它是以一種非常奇怪的方式創建的,因為*
在正常情況下我不建議將其作為目錄名稱) .