개요
Remove-Item은 파일, 디렉터리, 레지스트리 키, 변수, 별칭, 함수 등 여러 프로바이더가 노출하는 항목을 삭제하는 cmdlet이다. 삭제는 복구가 기본적으로 지원되지 않는 작업이므로, 이 컬렉션의 다른 어떤 cmdlet보다도 실행 전 확인이 중요하다.
사용법
| |
매개변수
| 매개변수 | 설명 |
|---|---|
-Recurse | 하위 항목까지 재귀적으로 삭제 |
-Force | 숨김·읽기 전용 항목도 삭제(보안 제한까지 무시하지는 못함) |
-Filter / -Include / -Exclude | 31장·34장과 같은 규칙 |
-Stream(FileSystem 동적 매개변수, Windows) | NTFS 대체 데이터 스트림(예: Zone.Identifier)만 삭제. -Recurse와 함께 쓸 수 없다 |
-DeleteKey(Certificate 동적 매개변수) | 인증서 삭제 시 개인 키도 함께 삭제 |
예시
| |
주의사항·함정
-Path에 확장자를 넣고 -Recurse를 쓰면 예상과 다르게 동작할 수 있다(알려진 이슈): Remove-Item -Path *.csv -Recurse처럼 경로에 파일 형식을 직접 지정하면, cmdlet이 “자식이 없는 파일 하나를 찾는 중"이라고 오인해 -Recurse가 제대로 동작하지 않을 수 있다(Windows 1909부터는 개선됐지만 모든 환경에서 보장되지는 않는다). Get-ChildItem -Include *.csv -Recurse | Remove-Item처럼 먼저 대상을 찾아 파이프로 넘기는 패턴이 항상 안전하다.
디렉터리 삭제 확인은 -Confirm:$false로도 우회되지 않는다: 내용이 있는 디렉터리를 -Recurse 없이 지우려 하면 PowerShell은 항상 확인을 묻는다 — 이는 의도된 설계이며, -Confirm:$false를 붙여도 이 프롬프트는 사라지지 않는다. 스크립트에서 무인 실행이 필요하다면 애초에 -Recurse를 명시해야 한다.
-Exclude는 -Recurse 중 발견된 하위 항목의 부모까지는 보호하지 못한다: -Recurse와 -Exclude를 함께 쓸 때, -Exclude는 현재 디렉터리 결과에만 적용된다. 하위 폴더 안에 제외 패턴과 일치하는 파일이 있어도, 그 파일이 속한 상위 디렉터리 자체가 삭제 대상이면 함께 지워진다.
이식성: CMD의 del/rd, Bash의 rm/rmdir에 대응하지만, PowerShell은 레지스트리 키·별칭·변수처럼 파일이 아닌 항목까지 같은 cmdlet으로 삭제한다. 세 환경 모두 삭제가 기본적으로 복구 불가능한 작업이라는 점은 동일하다 — 실행 전 -WhatIf로 대상을 먼저 확인하는 습관은 어느 셸에서든 유효하다.
![Featured image of post [PowerShell] 36. Remove-Item — 삭제](/post/powershell/remove-item-command-delete-powershell/wordcloud_hu_2db797f33ab840f2.webp)
![[PowerShell] 34. Copy-Item — 복사](/post/powershell/copy-item-command-copy-file-powershell/wordcloud_hu_ebeda4bcc9a1c9ff.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] 37. Get-Content/Set-Content/Add-Content](/post/powershell/get-set-add-content-command-powershell/wordcloud_hu_f8c9bc65df09a5fa.webp)
![[PowerShell] 38. Get-ItemProperty/Set-ItemProperty](/post/powershell/get-set-itemproperty-command-powershell/wordcloud_hu_4fee0f6df596d89c.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] 40. 레지스트리 프로바이더(Registry:) 다루기](/post/powershell/registry-provider-hklm-hkcu-powershell/wordcloud_hu_cf90c98823ba3b1c.webp)