前景提要:
排查Docker问题时,虽然好不容易找到了Docker的日志目录,但是里面的日志太多了,并且也不知道哪个日志是做什么的。
因为文件夹里的文件太多了,粗粗看一下,可以发现这里面至少有20多种日志文件。
想要了解每个文件都是什么功能的日志,有什么作用,只能一种一种的去查询它们的用途,这样效率显而易见的很低。
有没有什么办法能够快速获取这个文件夹中的所有文件名称列表,让它们输出到一个文件,以便后续的查询工作?
需要注意的是,log文件夹中本身包含很多子文件夹,需要同时列出子文件夹中的内容。
这里是几个脚本,可以实现这个功能:
- 不带路径
列出所有日志文件,不包含任何路径。
Get-ChildItem -Path "$Env:LOCALAPPDATA\Docker\log" -Recurse -File |
Select-Object Name |
Out-File -FilePath "$env:USERPROFILE\Desktop\docker_logs_list.txt" -Encoding UTF8
运行效果:
- 带路径
列出所有日志文件(含子文件夹)
Get-ChildItem -Path "$Env:LOCALAPPDATA\Docker\log" -Recurse -File |
Select-Object FullName |
Out-File -FilePath "$env:USERPROFILE\Desktop\docker_logs_list.txt" -Encoding UTF8
运行效果:
- 按照子文件夹分类的命令
Get-ChildItem -Path "$Env:LOCALAPPDATA\Docker\log" -Recurse -File |
Group-Object { Split-Path $_.FullName -NoQualifier | Split-Path -Parent } |
ForEach-Object {
($_.Name -replace [regex]::Escape($base),"").TrimStart('\')
$_.Group | ForEach-Object { $_.Name }
""
} | Out-File -FilePath "$env:USERPROFILE\Desktop\docker_logs_grouped.txt" -Encoding UTF8
运行效果:
- 输出只带子文件夹的相对路径
Get-ChildItem -Path "$Env:LOCALAPPDATA\Docker\log" -Recurse -File |
ForEach-Object { $_.FullName.Substring($base.Length+1) } |
Out-File -FilePath "$env:USERPROFILE\Desktop\docker_logs_list.txt" -Encoding UTF8
运行效果:
PS:后续会更新Docker问题排查相关文章,敬请期待