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 / 명령어 / awk - 필드별 텍스트 분석과 계산

Linux / 명령어 / awk - 필드별 텍스트 분석과 계산

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

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

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

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Bash가 명령을 해석하고 종료 상태에 따라 다음 명령을 실행하는 방식을 알아봅니다. ;, &&, ||와 별칭·환경 변수의 차이를 안전한 예제로 설명합니다.

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux realpath 명령어로 상대 경로와 심볼릭 링크를 정규화하고 절대·상대 경로를 출력하는 방법을 설명합니다. 경로 존재 조건과 보안상 주의점도 함께 정리합니다.

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

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

Linux / 명령어 / su - 사용자 계정 전환

Linux / 명령어 / su - 사용자 계정 전환

Linux su 명령어로 다른 사용자 권한의 셸과 단일 명령을 실행하는 방법을 설명합니다. su와 su --login 차이, 환경 변수, PAM 인증, sudo·runuser 선택 기준과 보안 주의사항을 정리합니다.

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux uptime 명령어의 가동 시간과 1분·5분·15분 평균 부하를 읽는 방법을 설명합니다. CPU 개수, I/O 대기와 함께 부하를 진단하는 순서도 정리합니다.

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

리눅스 파일과 디렉터리의 읽기·쓰기·실행 권한을 해석하고 chmod로 실습 파일의 권한을 바꿉니다. sudo의 사용 범위와 권한 오류를 진단하는 순서도 설명합니다.

Linux / Memo

Linux / Memo

리눅스와 관련된 여러 정보를 정리합니다.

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

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