며칠 전에 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의 답변과 동일합니다.
-
패턴을 포함하는 모든 파일의 FileInfo 오브젝트를 나열하십시오 .
Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet } ls -r filespec | ? { sls pattern $_ -q }
-
패턴을 포함하는 모든 파일의 파일 이름 을 나열 하십시오 .
Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path ls -r filespec | sls pattern | select -u Path
-
패턴을 포함 하지 않는 모든 파일에 대한 FileInfo 오브젝트를 나열하십시오 .
Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) } ls -r filespec | ? { !(sls pattern $_ -q) }
-
패턴을 포함 하지 않는 모든 파일의 파일 이름 을 나열 하십시오 .
(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" }