리눅스 파일 및 디렉토리 이름 변경 : mv와 rename 명령어 활용법

리눅스 파일 및 디렉토리 이름 바꾸기: mv와 rename 명령어 활용법 - 리눅스에서 mv와 rename 명령어로 파일이나 디렉토리의 이름을 바꿀 수 있습니다. 이 글에서는 기본 사용법과 다양한 옵션들을 예제와 함께 알아봅니다. 리눅스 파일 관리 팁도 소개합니다.
인프라코디
리눅스 파일 및 디렉토리 이름 변경 : mv와 rename 명령어 활용법

리눅스에서 파일 이름을 변경하는 방법은 여러 가지가 있습니다. 그중에서 가장 많이 사용되는 두 가지 명령어인 mvrename에 대해 자세히 알아보겠습니다. 이 두 명령어는 각각 다른 특징과 장단점을 가지고 있으므로, 상황에 맞게 적절하게 선택하여 사용하는 것이 중요합니다.

리눅스 파일 이름 변경하기에 대해 배우기 전에, 먼저 리눅스에서 파일과 디렉토리의 개념에 대해 간단히 설명하겠습니다. 리눅스에서는 파일과 디렉토리를 모두 inode라는 고유한 번호로 식별합니다. inode는 파일이나 디렉토리의 속성 정보를 담고 있으며, 실제 데이터는 디스크의 다른 곳에 저장됩니다. 따라서 리눅스에서 파일 이름을 변경하는 것은 inode의 번호를 바꾸는 것이 아니라, inode와 연결된 이름을 바꾸는 것입니다. 즉, 파일 이름은 inode의 별칭(alias)이라고 할 수 있습니다.

리눅스에서 파일 이름을 변경하는 이유는 다양합니다. 예를 들어, 파일의 용도나 내용을 명확하게 표시하고 싶거나, 파일의 확장자를 바꾸고 싶거나, 파일의 순서나 규칙을 맞추고 싶거나, 파일의 권한이나 소유자를 변경하고 싶은 경우 등이 있습니다. 리눅스에서는 이러한 작업을 쉽고 빠르게 할 수 있는 두 가지 명령어가 있습니다. 바로 mv와 rename입니다.

그럼 이제 리눅스 파일 이름 변경하기 위한 mv와 rename 명령어의 사용법과 예제를 통해 각각의 특징과 차이점을 이해하고, 어떤 경우에 어떤 명령어를 사용하는 것이 좋은지 알아보겠습니다.

환경 정보

  • 운영 체제 : Rocky Linux 9.2
  • 실행 계정 : root
  • mv 버전 : mv (GNU coreutils) 8.32
  • rename 버전 : rename from util-linux 2.37.4
리눅스 파일 및 디렉토리 이름 변경 : mv와 rename 명령어 활용법
mv --help

mv 명령어로 파일 이름 변경하기

mv 명령어는 파일과 디렉토리의 위치를 변경(move)하는 역할을 하지만, 이름을 바꿀 때도 사용할 수 있습니다. mv 명령어의 기본적인 사용법은 다음과 같습니다.

mv [옵션] 원본이름 변경할이름

mv 명령어로 파일 이름을 변경할 때는 원본 파일의 이름과 확장자를 모두 입력해야 합니다.

mv test.txt test.docx

만약 test.docx라는 파일이 이미 존재한다면, 다음과 같은 메시지가 나타납니다.

mv: overwrite 'test.docx'?

y를 입력하면 덮어쓰고, n을 입력하면 취소합니다. -f 옵션을 사용하면 메시지 없이 바로 덮어쓰게 됩니다.

mv -f test.txt test.docx

mv 명령어로 디렉토리의 이름을 변경할 때는 원본 디렉토리의 이름만 입력하면 됩니다. 예를 들어, 다음과 같이 folder1 디렉토리의 이름을 folder2로 바꾸면 됩니다.

mv folder1 folder2

mv 명령어는 이름을 변경하는 것뿐만 아니라, 위치도 변경할 수 있습니다. 즉, 파일이나 디렉토리를 다른 곳으로 이동시킬 수 있습니다. 이때는 변경할 이름에 이동할 경로를 함께 입력해야 합니다. 예를 들어, 다음과 같이 test.txt 파일의 이름을 test.docx로 바꾸면서 /home 디렉토리로 이동시킬 수 있습니다.

mv test.txt /home/test.docx

mv 명령어의 장점은 단순하고 간편하게 파일이나 디렉토리의 이름을 변경하고 이동할 수 있다는 것입니다. 하지만 mv 명령어의 단점은 한 번에 여러 개의 파일이나 디렉토리의 이름을 변경할 수 없다는 것입니다. 예를 들어, 현재 디렉토리에 a.txt, b.txt, c.txt라는 세 개의 파일이 있다고 가정해봅시다. 이 세 개의 파일의 확장자를 모두 .docx로 바꾸고 싶다면, 다음과 같이 세 번의 mv 명령어를 입력해야 합니다.

mv a.txt a.docx
mv b.txt b.docx
mv c.txt c.docx

이런 경우에는 mv 명령어보다는 rename 명령어를 사용하는 것이 더 효율적입니다.

리눅스 파일 및 디렉토리 이름 변경 : mv와 rename 명령어 활용법
rename --help

rename 명령어로 파일 이름 변경하기

rename 명령어는 여러 가지 버전이 있으며, 각 버전마다 구문이 다를 수 있습니다. 예를 들어, perl 스크립트로 작성된 버전은 정규식(regular expression)을 사용할 수 있지만, util-linux 패키지에 포함된 버전은 정규식을 사용할 수 없습니다. 이 경우에는 rename 명령어의 버전을 확인하고 적절한 구문을 사용해야 합니다. 예를 들어, 아래와 같은 방법들이 있습니다.

  • rename 명령어의 버전을 확인하는 방법 : rename --version 또는 man rename
  • perl 스크립트로 작성된 버전의 구문 : rename 's/.txt$/.docx/' *
  • util-linux 패키지에 포함된 버전의 구문 : rename .txt .docx *.txt

rename 명령어는 여러 개의 파일이나 디렉토리의 이름을 한 번에 변경할 수 있습니다. util-linux 패키지에 포함된 rename 명령어의 기본적인 사용법은 다음과 같습니다.

rename [옵션] 원본이름 변경할이름 대상이름

rename 명령어에서 원본이름과 변경할이름 사이에 공백을 사용하여 구분합니다. 마지막에 대상이름에 *을 사용하면 모든 파일이나 디렉토리를 대상으로 한다는 것을 의미합니다.

옵션에는 다양한 것이 있지만, 여기서는 가장 많이 쓰이는 -n과 -v에 대해서만 설명하겠습니다. -n 옵션은 no action의 약자로, 실제로 파일 이름을 변경하지 않습니다. -v 옵션은 verbose의 약자로, 파일 이름을 변경할 때 변경된 파일 이름을 출력해주는 옵션입니다.

예를 들어, 다음과 같이 현재 디렉토리에 있는 모든 .txt 파일의 확장자를 .docx로 바꾸면 됩니다.

rename .txt .docx test*.txt

여기서 .txt는 .txt로 변경할 대상 문자열을 의미하고, .docx은 .txt를 .docx으로 바꾸라는 의미입니다. test*.txt는 test로 시작하고 .txt로 끝나는 모든 파일을 의미합니다.

-v 옵션을 사용하면 변경된 파일 이름을 출력해줍니다.

rename -v .txt .docx test*.txt
[root@infracody.com ~]# rename -v .txt .docx test*.txt `test1.txt' -> `test1.docx' `test2.txt' -> `test2.docx' `test3.txt' -> `test3.docx' [root@infracody.com ~]# ls -al total 20 drwxr-xr-x 2 root root 4096 Aug 8 14:31 ./ dr-xr-x---. 7 root root 4096 Aug 8 13:12 ../ -rw-r--r-- 1 root root 4 Aug 8 13:32 test1.docx -rw-r--r-- 1 root root 4 Aug 8 13:32 test2.docx -rw-r--r-- 1 root root 4 Aug 8 13:32 test3.docx

-n 옵션을 사용하면 실제로 변경하지 않고 테스트만 합니다. -vn 옵션을 사용해서 .docx 확장자를 .txt로 치환하는 테스트 명령을 실행합니다.

rename -vn .docx .txt test*.docx
[root@infracody.com ~]# rename -vn .docx .txt test*.docx `test1.docx' -> `test1.txt' `test2.docx' -> `test2.txt' `test3.docx' -> `test3.txt' [root@infracody.com ~]# ls -al total 20 drwxr-xr-x 2 root root 4096 Aug 8 14:31 ./ dr-xr-x---. 7 root root 4096 Aug 8 13:12 ../ -rw-r--r-- 1 root root 4 Aug 8 13:32 test1.docx -rw-r--r-- 1 root root 4 Aug 8 13:32 test2.docx -rw-r--r-- 1 root root 4 Aug 8 13:32 test3.docx

rename 명령어로 디렉토리의 이름을 변경할 때도 비슷한 방법을 사용할 수 있습니다. 예를 들어, 다음과 같이 현재 디렉토리에 있는 모든 folder라는 문자열을 dir로 바꾸면 됩니다.

rename test infracody *
[root@infracody.com ~]# ls -al total 20 drwxr-xr-x 5 root root 4096 Aug 8 14:45 ./ dr-xr-x---. 7 root root 4096 Aug 8 13:12 ../ drwxr-xr-x 2 root root 4096 Aug 8 14:44 test1/ drwxr-xr-x 2 root root 4096 Aug 8 14:44 test2/ drwxr-xr-x 2 root root 4096 Aug 8 14:44 test3/ [root@infracody.com ~]# rename -v test infracody * `test1' -> `infracody1' `test2' -> `infracody2' `test3' -> `infracody3' [root@infracody.com ~]# ls -al total 20 drwxr-xr-x 5 root root 4096 Aug 8 14:45 ./ dr-xr-x---. 7 root root 4096 Aug 8 13:12 ../ drwxr-xr-x 2 root root 4096 Aug 8 14:44 infracody1/ drwxr-xr-x 2 root root 4096 Aug 8 14:44 infracody2/ drwxr-xr-x 2 root root 4096 Aug 8 14:44 infracody3/

rename 명령어의 장점은 복잡하고 다양한 패턴의 파일이나 디렉토리의 이름을 한 번에 변경할 수 있다는 것입니다. 하지만 rename 명령어의 단점은 잘못 사용하면 예상치 못한 결과가 나올 수 있으므로 -vn 옵션을 사용하여 미리 테스트해보는게 좋습니다. 또한 rename 명령어는 위치를 변경하는 기능은 없으므로, 이동시키고 싶은 경우에는 mv 명령어를 사용해야 합니다.

파일 이름 변경 시 주의할 점

리눅스에서 파일 이름을 변경할 때 주의할 점은 다음과 같습니다.

  • 리눅스에서는 대소문자를 구분합니다. 예를 들어, Test.txt와 test.txt는 서로 다른 파일입니다. 따라서 파일 이름을 변경할 때 대소문자를 잘 확인해야 합니다.
  • 리눅스에서는 공백이나 특수문자를 파일 이름에 사용할 수 있습니다. 예를 들어, Infra Cody.txt와 Infra_Cody.txt나 Infra-Cody.txt 모두 유효한 파일 이름입니다. 하지만 공백이나 특수문자가 포함된 파일 이름을 사용할 때는 따옴표나 백슬래시를 이용해야 합니다. 예를 들어, Infra Cody.txt라는 파일 이름을 변경하려면 다음과 같이 입력해야 합니다.
  • mv "Infra Cody.txt" New_File.txt
    또는
    mv Infra\ Cody.txt New_File.txt
  • 리눅스에서는 확장자가 파일의 종류를 결정하지 않습니다. 예를 들어, .txt 확장자가 붙은 파일이라고 해서 반드시 텍스트 파일이라는 보장은 없습니다. 리눅스에서는 파일의 종류를 결정하는 것은 파일의 내용이나 권한입니다. 따라서 파일 이름을 변경할 때 확장자를 바꾸더라도 파일의 종류가 바뀌지 않습니다. 예를 들어, test.txt라는 텍스트 파일을 test.jpg라고 바꾸면, 그 파일은 여전히 텍스트 파일로 인식됩니다.
  • [root@infracody.com ~]# echo "111" > test.txt [root@infracody.com ~]# file test.txt test.txt: ASCII text [root@infracody.com ~]# rename -v .txt .jpg test.txt `test.txt' -> `test.jpg' [root@infracody.com ~]# file test.jpg test.jpg: ASCII text

마치며

리눅스에서 파일 이름을 변경하기 위해 mv와 rename 명령어를 사용할 수 있습니다. mv 명령어는 단순하고 간편하게 파일이나 디렉토리의 이름을 변경하고 이동할 수 있지만, 한 번에 여러 개의 파일이나 디렉토리의 이름을 변경할 수 없습니다. rename 명령어는 다양한 패턴의 파일이나 디렉토리의 이름을 한 번에 변경할 수 있지만, 잘못 사용하면 예상치 못한 결과가 나올 수 있으므로 주의해서 -vn 옵션으로 사전 테스트하여 사용하는 게 좋습니다. 또한 rename 명령어는 위치를 변경하는 기능은 없습니다. 따라서 상황에 맞게 적절한 명령어를 선택하여 사용하는 것이 좋습니다.

인프라코디
서버, 네트워크, 보안 등 IT 인프라 관리를 하는 시스템 엔지니어로 일하고 있으며, IT 기술 정보 및 일상 정보를 기록하는 블로그를 운영하고 있습니다. 글을 복사하거나 공유 시 게시하신 글에 출처를 남겨주세요.

- 블로그 : www.infracody.com

이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.
댓글