[string] 여러 파일에서 문자열을 검색하고 Powershell에서 파일 이름을 반환하는 방법은 무엇입니까?

며칠 전에 Powershell을 배우기 시작했으며 Google에서 필요한 것을 수행하는 것을 찾을 수 없으므로 내 질문을 참아주십시오.

일부 텍스트 문자열을 여러 파일로 바꾸라는 요청을 받았습니다. 가능한 대상 파일의 확장자를 반드시 알 필요는 없으며 그 위치도 모릅니다. 지금까지 나는 디렉토리 ( get-ChildItem -recurse) 를 재귀 적으로 탐색 하고 get-content 및 select-string으로 찾고있는 문자열을 찾았습니다.

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"

문제는 내가 찾고있는 텍스트의 발생을 볼 수 있지만 PS에게 일치하는 모든 파일의 경로와 이름을 반환하도록 지시하는 방법을 모른다는 것입니다.

찾고있는 표현식이 포함 된 파일의 이름과 위치는 어떻게 알 수 있습니까?



답변

패턴이 포함 된 파일의 위치를 ​​지정해야합니다.

Get-ChildItem -Recurse | Select-String "dummy" -List | Select Path


답변

여기에는 다양한 정확한 답변이 있지만 여기에 몇 가지 다른 변형에 대한 가장 간결한 코드가 있습니다. 각 변형에 대해 맨 위 줄에 전체 구문이 표시되고 맨 아래에 간결한 구문이 표시됩니다.

항목 (2)는 Jon Z와 manojlds의 답변의 간결한 형태이며, 항목 (1)은 vikas368 및 buygrush의 답변과 동일합니다.

  1. 패턴을 포함하는 모든 파일의 FileInfo 오브젝트를 나열하십시오 .

    Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet }
    ls -r filespec | ? { sls pattern $_ -q }
    
  2. 패턴을 포함하는 모든 파일의 파일 이름 을 나열 하십시오 .

    Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path
    ls -r filespec | sls pattern | select -u Path
    
  3. 패턴을 포함 하지 않는 모든 파일에 대한 FileInfo 오브젝트를 나열하십시오 .

    Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }
    ls -r filespec | ? { !(sls pattern $_ -q) }
    
  4. 패턴을 포함 하지 않는 모든 파일의 파일 이름 을 나열 하십시오 .

    (Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName
    (ls -r filespec | ? { !(sls pattern $_ -q) }).FullName
    

답변

패턴과 일치하는 경로, 파일 이름 및 컨텐츠 라인이 표시됩니다.

Get-ChildItem -Path d:\applications\*config -recurse |  Select-String -Pattern "dummy" 


답변

당신의 내용을 파이프

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"

fl *

경로가 이미 객체의 속성으로 반환되고 있음을 알 수 있습니다.

경로 만 원하면 select path또는 select -unique path을 사용 하여 중복을 제거하십시오.

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path


답변

이것이 내가하는 방법입니다. 콘텐츠를 얻을 필요가 없습니다.

ls -r | Select-String dummy | select line,path

또는

ls -r | Select-String dummy | fl *

다른 속성이 무엇인지 보려면 …

이것은 더 빠릅니다. 두 번째 인수는 -filter입니다.

ls -r . *.bat | select-string netsh


답변

Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}

이것은 당신에게 모든 파일의 전체 세부 사항을 제공합니다


답변

전체 파일 상세 정보를 결과 배열로 유지하려면 vikas368에 의해 게시 된 답변을 약간 수정하여 사용할 수 있습니다 (ISE 자동 완성에서는 제대로 작동하지 않는 것 같습니다).

Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }

또는 짧게 :

ls -r | ?{ $_ | Select-String -Pattern "dummy" }