
Get-ChildItem (Linux find 의 PowerShell 버전)
- PowerShell에서 파일 시스템을 재귀적으로 탐색하며 조건에 맞는 항목을 찾는(find) 핵심 cmdlet.
- list
ls라는 alias를 가지고 있음: 이 경우-recurse라는 옵션이 빠져서 사용됨.get-childitem은 Linuxfind와 달리 재귀 탐색은 기본값이 아니기 때문임.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-childitem은 ls를 alias로 가지는데 이 경우엔 비재귀적으로 처리가 이루어짐.
쉽게 말해서 get-childitem에서 -recurse가 빠지면 의미적으로 Linux의 find가 아니라 ls에 가까워진다.
이름 기반 탐색 : -name 옵션
-filter 옵션과 같이 사용
이름이 특정 패턴을 따르는 경우의 항목들을 검색.
Get-ChildItem -Recurse -Filter "*.log"
이는 다음의 find와 같은 의미임:
find . -name "*.log"
- 파일 시스템 레벨에서 필터링
- 객체를 검색하는
Where-Object보다 훨씬 빠름
-filter는 FileSystem 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
'utils > cmd and powershell' 카테고리의 다른 글
| Windows PowerShell 명령어 (기본): PowerShell 5.x (0) | 2025.12.31 |
|---|---|
| Windows에서 Oh-My-Posh 설치하기 (0) | 2025.10.11 |
| [cmd] comp 명령어 (0) | 2024.05.20 |
| [cmd] command prompt 연습하기 (file, dir 사용하기) (0) | 2024.05.20 |