Linux / 명령어 / mv - 파일 이동과 이름 변경

mv는 파일과 디렉터리를 다른 위치로 이동하거나 이름을 바꾸는 명령입니다. 같은 파일 시스템에서는 대개 디렉터리 항목을 바꾸는 빠른 이름 변경으로 처리되지만, 다른 파일 시스템으로 이동할 때는 복사 후 원본 삭제와 비슷하게 동작합니다.

이 글에서는 기본 문법, 여러 항목 이동, 덮어쓰기 제어, 대상 경로의 모호함을 줄이는 옵션과 대용량 이동 시 주의점을 설명합니다.

mv 명령어란?

mv는 원본 경로를 대상 경로로 이동합니다. 두 인수를 지정했을 때 대상이 기존 디렉터리이면 그 안으로 이동하고, 그렇지 않으면 대상 이름으로 변경합니다. 파일 시스템 경계를 넘으면 GNU mv는 복사에 성공한 뒤 원본을 제거하는 방식으로 처리할 수 있으므로 작업 시간이 길어지고 부분 성공 가능성도 생깁니다.

기본 문법

mv [옵션] 원본 대상
mv [옵션] 원본 ... 디렉터리
mv [옵션] -t 디렉터리 원본 ...

파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 mv --help와 man mv으로 현재 시스템의 설명을 확인하세요.

mv 기본 사용법

파일 이름 변경하기

같은 디렉터리 안에서 새 이름을 지정합니다.

mv draft.txt final.txt

파일을 다른 디렉터리로 이동하기

대상이 기존 디렉터리이면 원래 이름을 유지한 채 그 안으로 이동합니다.

mv report.pdf archive/

여러 파일을 한 번에 이동하기

원본이 여러 개이면 마지막 인수는 대상 디렉터리여야 합니다.

mv *.log old-logs/
mv -t old-logs app.log access.log error.log

이동·이름 변경 결과 확인하기

mv가 성공하면 일반적으로 출력이 없습니다. 이름을 바꾼 뒤 원래 경로가 사라지고 새 경로가 생겼는지 확인할 수 있습니다.

printf 'demo\n' > before.txt
mv before.txt after.txt
test -f after.txt && test ! -e before.txt
echo $?

예시 출력 0은 두 조건이 모두 참이라는 뜻입니다. 다른 파일시스템으로 옮길 때는 내부적으로 복사와 삭제가 일어날 수 있으므로 대용량 작업은 결과 파일의 크기·내용도 검증하세요.

주요 옵션

옵션 설명
-i 기존 대상을 덮어쓰기 전에 확인합니다.
-n, --no-clobber 기존 대상을 덮어쓰지 않습니다.
-f, --force 확인 없이 덮어쓰기를 시도합니다.
-u, --update 대상이 없거나 원본이 더 새로운 경우 등 조건에 따라 이동합니다.
-v 처리하는 경로를 출력합니다.
-b, --backup 덮어쓸 대상 파일의 백업본을 만듭니다.
-T, --no-target-directory 대상을 디렉터리가 아니라 정확한 경로로 취급합니다.
-t DIR 대상 디렉터리를 옵션으로 지정합니다.

긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.

실전 활용 예제

덮어쓰기 전에 확인하거나 백업하기

수동 작업은 -i, 자동화에서 덮어쓰기 자체를 피하려면 -n이 유용합니다. 기존 대상의 백업본이 필요하면 -b를 검토하세요.

mv -iv new.conf /etc/myapp/config.conf
mv -bv new.conf /etc/myapp/config.conf

대상 경로를 명확히 지정하기

대상 이름과 같은 디렉터리가 우연히 존재하면 의도와 다른 위치로 들어갈 수 있습니다. 하나의 정확한 대상 경로로 바꾸려면 -T가 모호함을 줄여 줍니다.

mv -T staging current
mv -t archive -- file1 file2

파일 시스템 간 이동 확인하기

다른 마운트 지점으로 큰 파일을 이동하면 즉시 끝나는 이름 변경이 아니라 실제 데이터 복사와 원본 제거가 발생할 수 있습니다. 여유 공간과 중단 가능성을 확인하고 중요한 데이터는 검증 후 원본을 정리하는 절차를 고려하세요.

df -h source-dir destination-dir
mv -v large-image.raw /mnt/archive/

mv와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
mv 이동 또는 이름 변경 원본 경로를 없애고 대상 경로로 옮길 때
cp 독립된 복사본 생성 원본과 사본을 모두 유지할 때
rename 규칙에 따른 여러 이름 변경 배포판별 도구 문법을 확인하고 일괄 변경할 때
rsync --remove-source-files 검증 가능한 전송 후 원본 파일 정리 대규모·원격 이동을 세밀하게 제어할 때

사용할 때 주의할 점

이동은 휴지통으로 보내는 작업이 아니다

잘못된 덮어쓰기가 발생하면 이전 대상 파일을 쉽게 복원할 수 없습니다. 중요한 경로에서는 -i, -n 또는 백업을 사용하세요.

파일 시스템 간 이동은 부분 성공할 수 있다

여러 항목을 옮기다 중간에 공간 부족이나 권한 오류가 나면 일부는 대상에 있고 나머지는 원본에 남을 수 있습니다. 항목별 결과를 확인해야 합니다.

디렉터리 심볼릭 링크 뒤의 슬래시를 피한다

원본이 디렉터리를 가리키는 심볼릭 링크일 수 있을 때 뒤에 슬래시를 붙이면 시스템별로 예상치 못한 동작이 생길 수 있습니다. 링크 자체를 이동하려면 경로를 명확히 지정하세요.

FAQ

mv는 같은 파일 시스템에서 데이터를 다시 복사하나요?

일반적으로 같은 파일 시스템에서는 이름 변경으로 처리되어 빠릅니다. 다른 파일 시스템으로 이동하면 복사 후 원본 제거 방식이 될 수 있습니다.

기존 대상 파일을 덮어쓰지 않으려면 어떻게 하나요?

mv -n 원본 대상을 사용합니다. 대화형 확인이 필요하면 -i를 사용하세요.

파일 이름 변경과 이동은 문법이 다른가요?

둘 다 mv 원본 대상 형식입니다. 대상이 기존 디렉터리인지 새 경로인지에 따라 결과가 달라집니다.

여러 파일을 안전하게 한 디렉터리로 옮기려면 어떻게 하나요?

mv -t 대상디렉터리 -- 파일...처럼 대상 디렉터리를 명시하면 인수 구성이 분명해집니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux / 명령어 / more - 텍스트를 화면 단위로 나누어 보기

Linux / 명령어 / more - 텍스트를 화면 단위로 나누어 보기

Linux more 명령어로 긴 텍스트를 화면 단위로 읽는 방법을 설명합니다. 이동과 검색 키, 파이프 사용법, less와의 차이를 함께 정리합니다.

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

Linux fg 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / cut - 행에서 문자와 필드 추출

Linux / 명령어 / cut - 행에서 문자와 필드 추출

Linux cut 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

cat, less, more, head, tail로 리눅스 파일 내용을 읽는 방법을 비교합니다. 짧은 파일과 긴 파일, 앞·뒤 일부를 확인할 때의 선택 기준과 실습 결과를 설명합니다.

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux tee 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux stat 명령어로 파일 크기, 권한, 소유자, inode와 타임스탬프를 확인하는 방법을 설명합니다. atime·mtime·ctime·Birth의 차이와 출력 형식, 파일 시스템 조회법도 정리합니다.

Linux / 명령어 / zypper - openSUSE·SUSE에서 패키지와 저장소 관리

Linux / 명령어 / zypper - openSUSE·SUSE에서 패키지와 저장소 관리

Linux zypper 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux 강좌 / 텍스트 검색과 가공 - grep, sort, uniq, cut, wc

Linux 강좌 / 텍스트 검색과 가공 - grep, sort, uniq, cut, wc

grep, sort, uniq, cut, wc로 텍스트를 찾고 정렬·중복 제거·필드 추출·개수 세기를 실습합니다. 명령 결과와 흔한 해석 오류도 설명합니다.

Linux / 명령어 / journalctl - systemd 시스템·서비스 로그 조회

Linux / 명령어 / journalctl - systemd 시스템·서비스 로그 조회

Linux journalctl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.