[PowerShell] 특정 문자열이 있는 모든 파일 목록 뽑아내기

식빵·2023년 9월 17일
0

PowerShell

목록 보기
5/8
post-thumbnail

2가지 방법

# 방법 1: 서브 디렉토리가 없는 구조인 경우
(Select-String -Path .\*.txt -Pattern 'Group ID' -List).Path

# 방법 2: 서브 디렉토리도 있는 구조인 경우
Get-ChildItem -Recurse | Select-String -Pattern "Group ID" -CaseSensitive -List | Select-Object Path

# 방법 3: 방법 2의 또 다른 방법
$searchPath = "C:\your\directory\path"  # 검색을 시작할 경로
$searchString = "egov"                  # 찾을 문자열

Get-ChildItem -Path $searchPath -Recurse -File | ForEach-Object {
    if (Select-String -Path $_.FullName -Pattern $searchString -Quiet) {
        $_.FullName
    }
}

# 참고로 출력결과는 작성한 명령어 맨 앞에 변수 할당을 해줌으로써 저장할 수도 있다.
# ex:   $result = Get-ChildItem ....



참고: 테스트 데이터

테스트를 간편하게 해보고 싶으신 분들을 위해서
테스트 파일 생성법도 알려드립니다!

# 파일 생성
1..10 | foreach { ni -Path "test-$(([string]$_).PadLeft(2, '0')).txt" }
Get-childitem -File | Where-Object { ([Int16]$_.BaseName.Split("-")[1]) % 2 -eq 0 }


# 짝수번 번호를 갖는 파일에 내용 추가하기
Get-childitem -File | Where-Object { ([Int16]$_.BaseName.Split("-")[1]) % 2 -eq 0 } |
foreach { @'
Group ID (Vulid):  V-71989
Group ID (Vulid):  V-72222
'@ > $_}


# 확인
Get-childitem -File | Where-Object { ([Int16]$_.BaseName.Split("-")[1]) % 2 -eq 0 } |
foreach { 
   write-host "The File name $($_.Name) has content... $(Get-Content $_)"
}


# 특정 문자열을 갖는 텍스트 파일 찾아내기
Select-String -Path .\*.txt -Pattern 'Group ID' -List # List 를 넣어줘야 문서에 중복되서 Group ID 문자열이 찾아져도 딱 하나만 찍는다.

### 출력 예시
test-02.txt:1:Group ID (Vulid):  V-71989
test-04.txt:1:Group ID (Vulid):  V-71989
test-06.txt:1:Group ID (Vulid):  V-71989
test-08.txt:1:Group ID (Vulid):  V-71989
test-10.txt:1:Group ID (Vulid):  V-71989


# 파일의 경로만 추출하기
(Select-String -Path .\*.txt -Pattern 'Group ID' -List).Path

### 출력 예시
C:\study\pwsh-test\test-02.txt
C:\study\pwsh-test\test-04.txt
C:\study\pwsh-test\test-06.txt
C:\study\pwsh-test\test-08.txt
C:\study\pwsh-test\test-10.txt
profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글