Linux

來自不同文件夾的實時尾部,包含和排除文件

  • March 18, 2021

我想tail從三個不同的文件夾中生活,其中包含和排除某些文件。

文件夾 1:

  • 路徑:/var/www/app/var/log/
  • 僅排除:file1.log & file2.log

文件夾 2:

  • 路徑:/var/log/web/log/
  • 僅包括:error.log

文件夾 3:

  • 路徑:/var/log/service/log/
  • 僅包括:app1.error.log & app2.error.log

tail在一個命令中包含和排除某些文件的情況下,我將如何從三個不同的文件夾中尾隨?

tail -f ???

到目前為止嘗試過

tail -f /var/www/app/var/log/!(file1,file2).log /var/log/web/log/error.log /var/log/service/log/{app1,app2}.log 

但這不起作用。我覺得需要使用find+tail

使用您在 SU 上的不那麼不同的問題的回答來創建三個find命令,這些命令將找到您所追求的文件。然後:

{ find … -print0 ; find … -print0 ; find … -print0 ; } | xargs -r -0 tail -F

筆記:

  • -F因為這個:How to do a tail -fof log rotate files?
  • find命令只執行一次。如果出現一個新文件,其名稱本應匹配但當時不存在,tail則將忽略它。換句話說:當tail開始時,它的所有參數都是固定的,要成為的文件不在其中。
  • 如果結果表單finds 超過限制,則將xarg執行多個tail(預設情況下不是並行)。你當然不想要這個。希望您find的 s 會找到合理數量的文件,並且不會超過限制。
  • find -print0並且xargs -r -0不便攜。你標記了 ubuntu;在 Ubuntu 中,它們可以工作。

引用自:https://unix.stackexchange.com/questions/639670