파일 이름 변경은 GUI든 명령줄이든 누구나 자주 수행하는 기본적인 작업입니다.
그러나 GUI(그래픽 사용자 인터페이스)에 비해 CLI(명령줄 인터페이스)는 훨씬 더 강력합니다. 파일을 한 번에 여러 개(대량으로) 이름을 바꾸거나, 스크립트를 작성해 특정 시점에 자동으로 실행되도록 예약할 수 있기 때문입니다.
이 튜토리얼에서는 리눅스에 기본 내장된 mv 명령어를 사용해 명령줄에서 파일 이름을 변경하는 방법을 단계별로 알아봅니다.
리눅스 mv 명령어 사용 방법
리눅스에는 기본적으로 mv 명령어가 내장되어 있으며, 이를 활용하면 파일 이름을 손쉽게 변경할 수 있습니다.
mv 명령어의 기본 문법은 다음과 같습니다.
mv [옵션] 원본_파일 대상_파일
mv 명령어와 함께 유용하게 쓸 수 있는 주요 옵션은 다음과 같습니다.
-v,--verbose: 현재 진행 중인 작업 내용을 화면에 출력합니다.-i,--interactive: 파일 이름을 변경하기 전에 사용자에게 확인을 요청합니다.
예를 들어 index.html 파일의 이름을 web_page.html로 변경하고 싶다면 다음과 같이 mv 명령어를 사용하면 됩니다.
zaira@Zaira:~/rename-files$ mv index.html web_page.html
파일 목록을 확인해 실제로 이름이 변경되었는지 살펴보겠습니다.
zaira@Zaira:~/rename-files$ ls
web_page.html
mv 명령어로 파일 이름 대량 변경하기
이번에는 루프(loop)와 mv 명령어를 조합한 스크립트를 통해 폴더 안의 여러 파일 이름을 한 번에 변경하는 방법을 알아보겠습니다.
확장자가 .js인 파일 세 개가 있는 디렉터리가 있다고 가정해 보겠습니다.
zaira@Zaira:~/rename-files$ ls -lrt
total 0
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 index.js
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 config.js
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 blog.js
이제 이 파일들의 확장자를 모두 .html로 바꾸려고 합니다.
아래 명령어 하나만 입력하면 폴더 안의 모든 파일 이름을 한꺼번에 변경할 수 있습니다.
for f in *.js; do mv -- "$f" "${f%.js}.html"; done
길어 보이는 이 문자열을 하나씩 분해해서 내부 동작을 살펴보겠습니다.
- 첫 번째 부분 [
for f in *.js]은for루프에게 해당 디렉터리의 모든 ".js" 파일을 하나씩 처리하도록 지시합니다. - 두 번째 부분 [
do mv -- "$f" "${f%.js}.html"]은 각 파일에 대해 어떤 작업을 수행할지 지정합니다.mv명령어로 각 파일의 이름을 바꾸는데, 새 파일 이름은 원본 파일 이름에서.js부분을 제거하고 그 자리에.html확장자를 붙인 것입니다. - 마지막 부분 [
done]은 모든 파일의 처리가 끝나면 루프를 종료하는 역할을 합니다.
명령어 실행 후 파일 목록을 다시 확인하면 변경된 결과를 확인할 수 있습니다.
zaira@Zaira:~/rename-files$ ls -lrt
total 0
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 index.html
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 config.html
-rw-r--r-- 1 zaira zaira 0 Sep 30 00:24 blog.html
실전에서 유용한 추가 팁
대량 변경 작업 시 실수로 기존 파일을 덮어쓰는 것을 방지하려면 -i 옵션을 함께 사용해 덮어쓰기 전에 확인 메시지를 받는 것이 좋습니다. 또한 ${f%.js}와 같은 셸 매개변수 확장 문법을 익혀 두면 확장자 변경 외에도 접두사 추가, 파일명에서 특정 문자열 제거 등 다양한 이름 변경 작업에 활용할 수 있습니다.
마무리
지금까지 살펴본 것처럼 CLI를 활용하면 파일 이름 변경이 아주 간단합니다. 단일 파일 변경은 물론, 루프와 결합한 스크립트로 만들면 백업 파일 정리, 로그 파일 관리, 이미지 일괄 변환처럼 반복적인 작업까지 자동화할 수 있어 그 활용도는 무궁무진합니다.