我有一个目录树,其中包含约 150 个具有特定扩展名 ( .php
) 的文件,这些文件组织到不同的文件夹中。其中一些文件在第 2 行被标记以指示某种状态。我知道这个标记始终在第 2 行,并且始终遵循特定的格式。
我正在寻找某种东西(命令、脚本、程序),它可以在目录中搜索这个标记并提供这样的输出,但采用易于操作的格式:
理想的解决方案是提供所有.php
文件的列表,文件的第 2 行位于文件名旁边。上面的列表仅对匹配的文件执行此操作。
我尝试过find
循环使用for
:
for %f in (*.php) do find "Oracle Status" %f
但这只会搜索当前目录,并且不会以友好的方式格式化它。
答案1
如果您可以使用 PowerShell,那么此脚本应该可以完成这项工作:
Get-ChildItem *.php -Recurse | ForEach-Object {
$lines = Get-Content $_ -TotalCount 2
If ($lines.Length -GT 1 -And $lines[1].Length -GT 1 -And $lines[1].Contains('Oracle Status:')) {
New-Object -TypeName PSObject -Prop @{'FilePath' = $_.FullName; 'StatusLine' = $lines[1]}
}
}
它在控制台中产生如下输出:
此处显示的版本使用.txt
一行来搜索文件Status:
,但上面粘贴的版本可以满足您的要求。
将脚本另存为.ps1
文件,例如phpstatus.ps1
。如果您以前从未运行过 PowerShell 脚本,则需要运行此命令一次以允许执行脚本:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
完成后,您可以通过在 PowerShell 提示符下键入脚本.\
名称来调用该脚本,例如.\phpstatus.ps1
。 (Tab 补全有效。)由于输出是 PowerShell 对象的集合,因此您可以在它们上使用标准 PowerShell 数据管理命令。