
如何在 PowerShell 中複製 Linux tail 的行為?
我正在運行一個寫入日誌檔案 ( error.log
) 的應用程序,我希望查看其中的最後幾行並保持控制台更新更改。
tail -f filename
那麼是否有與 PowerShell類似的功能呢?
答案1
從 PowerShell 3 開始,Get-Content
(別名)cmdlet在檔案系統上使用時gc
支援-Tail
和參數。-Wait
用 找一下help gc
。
答案2
自 PSv3 以來的本機 PS 等效項是
Get-Content -Last n
這也很快。在 PSv2 及以下版本中你必須湊合使用
Get-Content filename | Select -Last n
但這有幾個警告。例如,它無法阻止並等待文件的新更改,而且效率也不是很高,因為它必須從頭開始完全讀取文件才能顯示最後幾行。
PSCX有一個Get-FileTail
帶有-Wait
參數的命令:
姓名
Get-FileTail
概要
PSCX Cmdlet:追蹤檔案的內容 - 可選擇等待新內容。
句法
Get-FileTail [-Path] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>] Get-FileTail [-LiteralPath] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>]
描述
這種實現透過從末尾讀取行而不是處理整個文件來有效地追蹤文件的內容。此行為對於有效追蹤大型日誌檔案和網路上的大型日誌檔案至關重要。您也可以指定
Wait
參數以使 cmdlet 等待並在新內容寫入檔案時顯示新內容。使用Ctrl+C來跳出等待循環。請注意,如果未指定編碼,cmdlet 將嘗試透過讀取檔案中的第一個字元來自動偵測編碼。如果尚未將任何字元寫入文件,則 cmdlet 將預設使用 Unicode 編碼。您可以透過 Encoding 參數明確指定編碼來覆寫此行為。
Get-FileTail
tail
如果您安裝 PSCX,則預設為別名。