mv 명령어는 리눅스에서 파일이나 디렉토리의 위치를 변경하거나 이름을 바꿀 때 사용하는 핵심 도구입니다. 세 가지 주요 사용 형태를 지원합니다.
기본 구문
mv [옵션] … [-T] 원본파일 대상파일
mv [옵션] … 원본파일 … 대상
mv [옵션] … -t 대상 원본파일 …
첫 번째 형태는 파일명 변경, 두 번째와 세 번째는 파일 이동에 활용됩니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
| -b | 덮어기 전 백업 파일 생성 |
| -f, --force | 확인 없이 강제로 덮어쓰기 |
| -i, --interactive | 덮어쓰기 전 사용자 확인 |
| -n, --no-clobber | 기존 파일 보호 (덮어쓰기 방지) |
| -u, --update | 원본이 더 최신일 때만 이동 |
주의: -f, -i, -n 옵션을 중복 지정하면 마지막에 지정한 옵션만 적용됩니다.
실전 예제
1. 파일명 변경
대상이 디렉토리가 아닐 경우 이름 변경으로 처리됩니다.
$ touch data.log
$ mv data.log archive.log
$ ls
archive.log
2. 확장자 일괄 추가
중괄호 확장을 활용한 효율적인 파일명 변경:
$ touch report
$ mv report{,.md}
$ ls
report.md
# 여러 파일 동시 처리
$ touch note memo
$ for f in note memo; do mv "$f" "${f}.txt"; done
3. 디렉토리 간 파일 이동
# 작업 디렉토리 설정
$ mkdir -p /tmp/source /tmp/target
$ touch /tmp/source/file{1..3}.dat
# 기본 이동 (와일드카드 활용)
$ mv /tmp/source/*.dat /tmp/target/
# -t 옵션으로 대상 먼저 지정
$ mv -t /tmp/source /tmp/target/*.dat
4. 디렉토리명 변경 vs 디렉토리 내부로 이동
mv의 동작은 대상의 존재 여부에 따라 달라집니다:
$ mkdir folderA folderB
# 대상이 없으면 이름 변경
$ mv folderA folderC # folderA → folderC 로 이름 변경
# 대상이 존재하는 디렉토리면 내부로 이동
$ mv folderC folderB # folderC를 folderB 내부로 이동
5. 백업 옵션 활용
-b 옵션 사용 시 물결표(~)가 붙은 백업이 생성됩니다:
$ echo "original content" > config.ini
$ echo "new settings" > config.tmp
$ mv -b config.tmp config.ini
$ cat config.ini
new settings
$ cat config.ini~
original content
백업 정책 상세 설정
VERSION_CONTROL 환경변수 또는 --backup 옵션으로 세밀한 제어가 가능합니다:
| CONTROL 값 | 동작 |
|---|---|
| none / off | 백업 생성 안 함 |
| numbered / t | 번호 순차 부여 (file.~1~, file.~2~) |
| existing / nil | 기존 번호 백업 있으면 계속, 없으면 simple 방식 |
| simple / never | 단일 백업만 유지 (반복 시 교체) |
# 번호 백업 예시
$ export VERSION_CONTROL=numbered
$ mv -b important.doc updated.doc
$ ls important.doc*
important.doc.~1~ important.doc.~2~ updated.doc
안전한 파일 작업 팁
- 중요 파일 작업 전
-i옵션으로 확인 절차 추가 - 스크립트에서는
-n또는-u로 의도치 않은 데이터 손실 방지 - 대량 이동 작업 전
ls로 대상 경로 미리 확인