Eu tenho uma árvore de diretórios que contém cerca de 150 arquivos com uma extensão específica ( .php
) organizada em pastas diferentes. Alguns desses arquivos estão marcados na linha 2 para indicar um determinado status. Eu sei que essa marca está sempre na linha 2, e sempre segue um formato específico.
O que estou procurando é algo (um comando, um script, um programa) que possa pesquisar essa marca no diretório e me fornecer uma saída como esta, mas em um formato fácil de manipular:
Uma solução ideal seria aquela que pudesse fornecer uma lista de TODOS os .php
arquivos, com a linha 2 do arquivo ao lado do nome do arquivo. A lista acima faz isso apenas para arquivos correspondentes.
Eu tentei usar find
em um for
loop:
for %f in (*.php) do find "Oracle Status" %f
Mas isso pesquisa apenas o diretório atual e não o formata de maneira amigável.
Responder1
Se você estiver satisfeito com o uso do PowerShell, este script deve fazer o trabalho:
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]}
}
}
Ele produz uma saída semelhante a esta no console:
A versão mostrada aqui pesquisou .txt
os arquivos com uma Status:
linha, mas a colada acima faz o que você deseja.
Salve o script como um .ps1
arquivo, por exemplo phpstatus.ps1
. Se você nunca executou um script do PowerShell antes, precisará executar este comando uma vez para permitir a execução de scripts:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Feito isso, você pode invocar o script a partir de um prompt do PowerShell digitando .\
seguido de seu nome, por exemplo .\phpstatus.ps1
, . (A conclusão da guia funciona.) Como a saída é uma coleção de objetos do PowerShell, você pode usar comandos padrão de gerenciamento de dados do PowerShell neles.