개요
Get-ChildItem(별칭 dir, ls, gci)은 지정한 위치의 항목과 그 하위 항목(child item)을 가져오는 cmdlet이다. 30장에서 다룬 프로바이더 계층 덕분에 파일 시스템뿐 아니라 레지스트리 키, 인증서 저장소에서도 똑같이 동작한다.
사용법
| |
매개변수
| 매개변수 | 설명 |
|---|---|
-Path | 대상 위치(생략 시 현재 디렉터리) |
-Filter | FileSystem 프로바이더가 항목을 가져오는 시점에 직접 적용하는 필터. *, ?만 지원하지만 -Include보다 빠르다 |
-Include / -Exclude | PowerShell이 항목을 다 가져온 뒤에 적용하는 필터. [] 패턴까지 지원하지만 -Path가 \*로 끝나야 하거나 -Recurse가 필요하다 |
-Recurse | 하위 디렉터리까지 재귀적으로 탐색 |
-Depth | 재귀 시 몇 단계까지 내려갈지 제한(PowerShell 5+) |
-Force | 숨김·시스템 파일까지 포함 |
-Directory / -File / -Hidden / -ReadOnly / -System | FileSystem 전용 동적 매개변수로 특정 속성의 항목만 조회 |
-Attributes | !(NOT), +(AND), ,(OR) 연산자로 여러 파일 속성을 조합해 정교하게 필터링 |
-Name | 전체 객체 대신 이름(문자열)만 반환 |
예시
| |
주의사항·함정
-Filter와 -Include는 동작 위치와 속도가 다르다: -Filter는 FileSystem 프로바이더(.NET API 수준)에서 항목을 열거하는 시점에 바로 적용되어 빠르지만, 지원하는 와일드카드가 */?로 제한적이다. -Include/-Exclude는 일단 모든 항목을 가져온 뒤 PowerShell이 다시 걸러내므로 유연하지만 느리다. 대용량 디렉터리에서는 -Filter를 우선 검토한다.
-Include를 쓰려면 -Path가 내용물을 가리켜야 한다: -Path C:\Test -Include *.txt는 아무 결과도 안 준다. -Path C:\Test\* -Include *.txt처럼 끝에 *를 붙이거나 -Recurse를 함께 써야 -Include가 실제로 적용된다.
-Recurse와 -Path의 와일드카드를 같이 쓸 때는 동작이 미묘하다: -Path의 마지막 구성 요소가 실제 하위 디렉터리 이름과 일치하면 그 디렉터리부터 재귀하고, 일치하지 않으면 패턴으로 취급해 전체를 재귀 탐색한다. 예측 가능한 결과가 필요하면 -LiteralPath로 대상 디렉터리를 지정하고 -Filter/-Include로 패턴을 걸어야 한다.
심볼릭 링크는 기본적으로 따라가지 않는다: -Recurse 중 만난 디렉터리 심볼릭 링크는 표시만 되고 그 안으로 들어가지 않는다. 링크 대상까지 탐색하려면 -FollowSymlink(FileSystem 동적 매개변수, PowerShell 6+)를 추가한다.
이식성: CMD dir의 /S(재귀)·/A(속성)·/B(이름만)에 각각 -Recurse·-Attributes·-Name이 대응하고, Bash find의 -maxdepth에 -Depth가 대응한다. 다만 PowerShell의 dir 별칭에 CMD 스위치를 그대로 넘기면 인식되지 않는다 — 00장에서 짚었듯 별칭은 이름만 같을 뿐 완전히 다른 구현이다.
![Featured image of post [PowerShell] 31. Get-ChildItem — 파일·디렉터리 목록](/post/powershell/get-childitem-command-file-directory-list-powershell/wordcloud_hu_193a6326f46b52e9.webp)
![[PowerShell] 29. Write-Host vs Write-Output — 출력 스트림 오개념 정리](/post/powershell/write-host-vs-write-output-streams-powershell/wordcloud_hu_cd68b845a7c59766.webp)
![[PowerShell] 30. PSDrive와 프로바이더 개념](/post/powershell/psdrive-provider-concept-powershell/wordcloud_hu_48d84a64f7474c4.webp)
![[PowerShell] 31. Get-ChildItem — 파일·디렉터리 목록](/post/powershell/get-childitem-command-file-directory-list-powershell/wordcloud_hu_3e00080e70b06aa7.webp)
![[PowerShell] 32. Set-Location/Push-Location/Pop-Location](/post/powershell/set-location-push-pop-location-powershell/wordcloud_hu_b555782207661429.webp)
![[PowerShell] 33. New-Item — 파일·디렉터리 생성](/post/powershell/new-item-command-create-file-directory-powershell/wordcloud_hu_c75a1ced5c6a3aa3.webp)
![[PowerShell] 35. Move-Item/Rename-Item — 이동과 이름 변경](/post/powershell/move-rename-item-command-powershell/wordcloud_hu_cb2a58d584784b24.webp)
![[PowerShell] 36. Remove-Item — 삭제](/post/powershell/remove-item-command-delete-powershell/wordcloud_hu_85e27bcaf405bed4.webp)
![[PowerShell] 12. Where-Object — 필터링](/post/powershell/where-object-command-filter-pipeline-powershell/wordcloud_hu_75843f29a19f2cc5.webp)