본문 바로가기
목차
utils/cmd and powershell

get-childitem : find 의 powershell 버전

by ds31x 2026. 1. 3.
728x90
반응형

Get-ChildItem (Linux find 의 PowerShell 버전)

  • PowerShell에서 파일 시스템을 재귀적으로 탐색하며 조건에 맞는 항목을 찾는(find) 핵심 cmdlet.
  • list ls라는 alias를 가지고 있음: 이 경우 -recurse라는 옵션이 빠져서 사용됨.
    • get-childitem은 Linux find와 달리 재귀 탐색은 기본값이 아니기 때문임.
    • get-childitem-recurse 옵션을 명시해야만 find와 동일한 동작 을 한다.

get-childitme은 찾고자 하는 대상의 path를 넘겨받으나,
아무것도 지정하지 않은 경우 명령을 실행시킨 현재 디렉토리를 대상으로 동작함.

 

Windows PowerShell 에서의 명령어에 대해 어느정도 익숙한 상태에서 읽어보길 권함:

2025.12.31 - [utils/cmd and powershell] - Windows PowerShell 명령어 (기본): PowerShell 5.x

 

Windows PowerShell 명령어 (기본): PowerShell 5.x

5.x 라고 했으나, MS사가 Windows PowerShell의 버전을 동결하고 이후의 버전은 PowerShell 6+ (현재의 Major version은 7임)로 분리한 상태임.기능 개선이 되어야 minor version이 올라가는데, Windows버전 향상이나

ds31x.tistory.com


기본 대응 관계

Linux find PowerShell get-childitem
find . Get-ChildItem -Recurse
find PATH Get-ChildItem PATH -Recurse
find . -type f Get-ChildItem -Recurse -File
find . -type d Get-ChildItem -Recurse -Directory


find와 차이점

출력의 차이

  • find문자열 경로를 출력
  • Get-ChildItem객체를 출력
Get-ChildItem -Recurse | Get-Member
  • Get-Member파이프라인으로 전달된 객체(Object)의 구조를 확인하는 cmdlet.
  • 즉, 이 명령의 출력은 어떤 타입이고, 어떤 속성과 메서드를 가지는가 를 보여줌.

get-childitem에서는

  • find-size, -mtime 같은 옵션을 사용하는 것 대신
  • 객체 속성파이프라인, 그리고 객체를 다루는 Where-Object 등을 사용한다.

재귀 여부

  • find기본이 재귀적으로 처리
  • Get-ChildItem비 재귀적 처리가 기본

get-childitemls를 alias로 가지는데 이 경우엔 비재귀적으로 처리가 이루어짐.

쉽게 말해서 get-childitem에서 -recurse가 빠지면 의미적으로 Linux의 find가 아니라 ls에 가까워진다.


이름 기반 탐색 : -name 옵션

-filter 옵션과 같이 사용

이름이 특정 패턴을 따르는 경우의 항목들을 검색.

Get-ChildItem -Recurse -Filter "*.log"

 

이는 다음의 find와 같은 의미임:

find . -name "*.log"
  • 파일 시스템 레벨에서 필터링
  • 객체를 검색하는 Where-Object보다 훨씬 빠름

-filterFileSystem Provider 가 이해하는 조건을 미리 전달하여,
directory enumeration 단계에서 OS 레벨로 항목을 걸러내는 옵션임.

 

때문에 반환된 객체에서 처리하는 where-object 보다 속도가 빠름.

(하지만, 단일 패턴 만 사용가능하다는 단점을 가짐.)


-include 옵션과 같이 사용

여러 패턴을 같이 지정할 수 있음:

Get-ChildItem -Recurse -Include *.py,*.ipynb
  • -include는 반드시-recurse 또는 와일드카드 경로와 함께 사용해야 함

 

위의 경우는 다음의 find 사용방식과 같은 의미임:

find . \( -name "*.py" -o -name "*.ipynb" \)
  • parenthesis 앞에 backslash가 있는 이유는 parenthesis 기호를 shell이 처리하지 않고 find에게 넘기기 위해서임.
  • backslash를 붙이는 경우, 뒤에 오는 기호(예: 서브셸 문법에 사용되는 기호)를
    셸이 해석하지 않도록 하고 find 명령에 그대로 전달하기 위해서임. 
  • 서브셸(subshell) 문법이란,
    현재 셸과 분리된 별도의 셸 환경에서 명령을 실행하도록 하는 셸 문법 으로
    대표적으로 parenthesis 인 괄호안에 있는 명령어들이 subshell에서 실행됨.

 

-filter 옵션은 파일 시스템에서 해당 패턴에 맞는 것만 가져오는 방식이라면,
-include는 이미 가져온 항목 중에서 해당하는 패턴만 남기는 방식임.

 

다수의 패턴이 필요한 경우에 사용되며, 보다 복잡한 패턴이 필요한 경우는 where-object와 같이 사용이 됨.


file / directory 타입 필터링

file만

Get-ChildItem -Recurse -File

 

다음의 find 사용방식과 같은 의미임:

find . -type f

directory만

Get-ChildItem -Recurse -Directory

 

다음의 find 사용방식과 같은 의미임:

find . -type d

참고: -force 옵션

파일이나 디렉토리에서 숨김 처리된 것 들도 포함하여 검색시 필요한 옵션.

Get-ChildItem -Recurse -Force
  • .git, .venv 등 포함
  • find의 기본 동작과 대응

조건 기반 탐색 (size / time) : 고급 기능(초보자는 생략해도 됨)

단독으로는 사용가능하지 않고,
where-object를 pipeline으로 이어서 같이 사용하여 해당 기능이 가능함.

 

where-object는 PowerShell 파이프라인에서 전달된 객체(Object)들 중, 조건을 만족하는 객체만 선별하는 필터링 cmdlet임.

해당 선별에서 객체의 속성을 이용하는 것이 특징.


파일 크기 기준

Get-ChildItem -Recurse -File | Where-Object Length -gt 10MB
  • -gt는 비교 연산자로 -lt, -eq 등이 있음.

이는 간략화된 버전으로 엄밀하게 기재하면 다음과 같음

Get-ChildItem -Recurse -File | Where-Object { $_.Length -gt 10MB }
  • $_ : 현재 파이프라인 객체.
  • $_.Length : 현재 파이프라인 객체로 넘겨진 객체의 Length 속성.
  • { } : 이는 script block이라고 불리며 나중에 실행될 수 있는 코드 덩어리를 하나의 객체로 표현한 것임.

이는 Linux에서 다음과 같은 의미임.

find . -type f -size +10M

수정 시간 기준

Get-ChildItem -Recurse -File | Where-Object LastWriteTime -lt (Get-Date).AddDays(-7)
  • (get-date) : Get-Date가 반환한 현재 시각을 나타내는 DateTime 객체에 대해 인스턴스 메서드 AddDays()를 호출하기 위해 괄호로 묶은 표현식.
  • 파일의 최종 수정 시각(LastWriteTime)이 현재 시각 기준 7일 이전인 경우를 찾음.

이의 엄밀한 기재는 다음과 같음:

Get-ChildItem -Recurse -File |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) }

 

다음의 find 사용방식과 같은 의미임:

find . -mtime +7

find -exec 대응: 결과 후처리

특정 문자열 포함 파일 찾기

Get-ChildItem -Recurse -File | Select-String "ERROR"

 

다음의 find 사용방식과 같은 의미임:

find . -type f -exec grep ERROR {} \;
  • semicolon 앞에 backslash가 있는 이유는 find에게 semicolon을 넘겨주고 shell에서 처리하지 않기 위해서임.

특정 패턴의 파일들만 삭제

Get-ChildItem -Recurse -Filter *.tmp | Remove-Item

 

다음의 find 사용방식과 같은 의미임:

find . -name "*.tmp" -delete

같이보면 좋은 자료들

2024.05.11 - [Linux] - [linux] find 사용법.

 

[linux] find 사용법.

find 명령어 사용법find 명령어는 UNIX 및 Linux 기반 시스템에서파일이나 디렉토리를 검색할 때 사용하는 S/W.이 명령어는 지정된 "[검색 시작 경로]"에서부터 파일 시스템을 순회하며주어진 조건에

ds31x.tistory.com


 

728x90