Powershell tail 多文件命令
Powershell tail multiple files command
我可以通过以下命令跟踪一个文件:
Get-Content -Path C:\log1.txt -Tail 10 –Wait
如何将其扩展到多个文件,我尝试了以下但没有成功:
Get-Content -Path C:\log1.txt,C:\log2.txt -Tail 10 –Wait
这只会从第一个文件而不是第二个文件中获取更新。
根据@mjolinor 的评论,我想出了以下似乎有效的方法,
Workflow My-Tail
{
Param([string[]] $Path)
foreach -parallel ($file in $path)
{
Get-Content -Path $file -Tail 1 -Wait
}
}
My-Tail (dir C:\*.log -Include log1.txt,log2.txt)
但是,这会出现某种进度条...
我需要跨多个文件进行尾部输出,我想尝试在一行中完成,
这是我最终想出的:
gci *.txt -recurse | ForEach-Object { Write-Output "$_`n" + $(Get-Content $_ -tail 5) + "`n" }
它采用所有名为 *.txt 的文件的递归目录列表,
将文件路径写入控制台,
然后将最后 5 行写入控制台。
我不需要跟踪文件的尾部,它们没有被主动写入。
我不能说这有多高效,但由于我使用的是 PowerShell Core 7.1.3,我不能使用工作流或 ForEach -Parallel
,但我可以使用 ForEach-Object -Parallel
, 所以我试了一下,看看会发生什么......
gci -Path C:\ -Filter log*.txt |
% -Parallel {
cat -Wait -Tail 10 -Path $_
} -ThrottleLimit 30
在我的例子中,我有 27 个文件需要监控,所以我选择了一个刚好高于这个的数字,这似乎有效。
为了确保它能正常工作,我使用了这个,它会在每一行之前输出源文件名:
gci -Path C:\ -Filter log*.txt |
% -Parallel {
$file = $_;
cat -Wait -Tail 10 -Path $file |
% { write "$($file.Name): ${_}" }
} -ThrottleLimit 30
我可以通过以下命令跟踪一个文件:
Get-Content -Path C:\log1.txt -Tail 10 –Wait
如何将其扩展到多个文件,我尝试了以下但没有成功:
Get-Content -Path C:\log1.txt,C:\log2.txt -Tail 10 –Wait
这只会从第一个文件而不是第二个文件中获取更新。
根据@mjolinor 的评论,我想出了以下似乎有效的方法,
Workflow My-Tail
{
Param([string[]] $Path)
foreach -parallel ($file in $path)
{
Get-Content -Path $file -Tail 1 -Wait
}
}
My-Tail (dir C:\*.log -Include log1.txt,log2.txt)
但是,这会出现某种进度条...
我需要跨多个文件进行尾部输出,我想尝试在一行中完成,
这是我最终想出的:
gci *.txt -recurse | ForEach-Object { Write-Output "$_`n" + $(Get-Content $_ -tail 5) + "`n" }
它采用所有名为 *.txt 的文件的递归目录列表,
将文件路径写入控制台,
然后将最后 5 行写入控制台。
我不需要跟踪文件的尾部,它们没有被主动写入。
我不能说这有多高效,但由于我使用的是 PowerShell Core 7.1.3,我不能使用工作流或 ForEach -Parallel
,但我可以使用 ForEach-Object -Parallel
, 所以我试了一下,看看会发生什么......
gci -Path C:\ -Filter log*.txt |
% -Parallel {
cat -Wait -Tail 10 -Path $_
} -ThrottleLimit 30
在我的例子中,我有 27 个文件需要监控,所以我选择了一个刚好高于这个的数字,这似乎有效。
为了确保它能正常工作,我使用了这个,它会在每一行之前输出源文件名:
gci -Path C:\ -Filter log*.txt |
% -Parallel {
$file = $_;
cat -Wait -Tail 10 -Path $file |
% { write "$($file.Name): ${_}" }
} -ThrottleLimit 30