개요
Move-Item은 항목을 원본에서 삭제하고 새 위치에 추가하는 cmdlet이고, Rename-Item은 같은 위치에서 이름만 바꾸는 cmdlet이다. 34장의 Copy-Item이 “복사(원본 유지)“였다면, 이 둘은 “이동(원본 소멸)“과 “개명(위치 불변)“으로 각각 역할이 나뉜다.
사용법
| |
매개변수
| 매개변수 | Move-Item | Rename-Item |
|---|---|---|
-Destination / -NewName | 새 위치(경로+이름 가능) | 새 이름만(경로가 섞이면 오류) |
-Force | 읽기 전용 항목도 이동, 기존 대상 덮어쓰기 | 읽기 전용 항목도 이름 변경(단 기존 이름 대체는 불가) |
| 재귀 여부 | 항상 재귀(디렉터리를 옮기면 내용물 전체가 함께 이동) | 해당 없음(이름만 바꾸므로 내용은 그대로) |
예시
| |
주의사항·함정
Rename-Item으로는 디렉터리를 옮길 수 없다: -NewName에 경로가 섞인 값(D:\archive\old-project.txt)을 주면 “경로나 장치 이름을 나타내므로 이름을 바꿀 수 없다"는 오류가 난다. 이름을 바꾸면서 동시에 위치도 옮기고 싶다면 처음부터 Move-Item -Destination을 써야 한다.
Move-Item은 파일은 드라이브를 넘나들지만 디렉터리는 같은 드라이브 안에서만 옮길 수 있다: 서로 다른 드라이브(다른 물리 디스크) 사이에서 디렉터리 자체를 이동하려면 Copy-Item -Recurse 뒤 원본을 Remove-Item으로 지우는 두 단계가 필요할 수 있다.
대상이 이미 있으면 두 cmdlet 모두 기본적으로 실패한다: Move-Item의 대상 경로가 이미 존재하는 항목이면 오류가 나고, -Force로 덮어써야 한다. Rename-Item은 -Force를 줘도 이미 있는 이름으로는 절대 바꿀 수 없다 — 기존 항목을 대체해야 한다면 Move-Item -Force를 쓰라고 문서가 명시한다.
대량 이동 중 이름이 겹치면 일부만 조용히 손실될 수 있다: 여러 하위 디렉터리에 흩어진 동명 파일들을 한 디렉터리로 Move-Item하면, 먼저 이동한 파일 하나만 남고 나머지는 오류와 함께 원래 위치에 남는다. 대상 디렉터리가 이미 있는지, 이름 충돌 가능성이 있는지 사전에 확인해야 한다.
이식성: CMD의 move/ren, Bash의 mv(이동과 이름변경을 겸함)에 대응한다. Bash의 mv는 이동과 개명을 구분하지 않는 단일 명령이지만, PowerShell은 “위치가 바뀌는가"와 “이름만 바뀌는가"를 서로 다른 cmdlet으로 명시적으로 구분한다.
![Featured image of post [PowerShell] 35. Move-Item/Rename-Item — 이동과 이름 변경](/post/powershell/move-rename-item-command-powershell/wordcloud_hu_2dc5f96318f0f8fc.webp)
![[PowerShell] 33. New-Item — 파일·디렉터리 생성](/post/powershell/new-item-command-create-file-directory-powershell/wordcloud_hu_c75a1ced5c6a3aa3.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] 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)