Just a Blog

복수 개 파일에 대해 한꺼번에 파일이름의 확장자 바꾸기 본문

IT, Computer

복수 개 파일에 대해 한꺼번에 파일이름의 확장자 바꾸기

wehong 2024. 3. 12. 02:14

한 디렉토리에 여러 개의 파일이 들어 있는데, 그 파일 중 특정한 확장자를 가진 파일을 또 다른 확장자로 바꾸고 싶다고 하자. 어떻게 하면 될까? 그런 상황이 발생해서 해결 방법을 모색했다.

 

물론 가장 무식하지만 단순한 방법은 직접 파일 별로 하나씩 확장자를 바꾸는 것이다. 파일이 많은 경우 번거롭고 시간도 많이 걸리므로 이 방법은 패스.

 

또 한 가지의 방법으로, 예전에 만들었던 Python 코드를 뜯어 고쳐 프로그램을 하나 만들었다. 재미로 할 만 하지만 단순 변경 작업을 위해 별도의 프로그램을 만든다는 것이 비효율적인 것 같다. 물론 필요에 맞는 프로그램을 빨리 찾을 수 있다면 더 효율 좋은 방법이 될 수 있겠다.

import sys
import os

def ext_conv(cur_path, asis_ext, tobe_ext):
    try:
        files = os.listdir(cur_path);
    except FileNotFoundError:
        quit()

    for f in files:
        tgt_file = os.path.join(cur_path, f)
        if os.path.isfile(tgt_file) and not f.startswith("."):
            fname, fext = os.path.splitext(tgt_file)
            if fext[1:] == asis_ext:
                new_file = fname + '.' + tobe_ext
                os.rename(tgt_file, new_file)

if __name__ == "__main__":
    if len(sys.argv) == 3:
        ext_conv(os.getcwd(), sys.argv[1], sys.argv[2])
    else:
        print("Usage: python ext_conv <as-is file ext> <to-be file ext>")

 

가장 좋은 방법은 인터넷/웹에서 검색을 하는 것이다. 검색해 보니 UNIX-like 환경에서 쉘 스크립트를 사용해서 간단히 하는 방법을 발견할 수 있었다. 이렇게 간단하고 좋은 방법이 있는데 바보짓을 했다. (아래의 예는 .txt 확장자 파일들을 .doc 확장자로 바꾸는 것)

# Rename all *.txt to *.doc
for file in *.txt; do
    mv -- "$file" "${file%.txt}.doc"
done

 

(보너스) Windows에서는...? 그냥 다음과 같은 batch 파일을 하나 만들고 실행하면 된다. (아래의 예는 .txt 확장자 파일들을 .doc 확장자로 바꾸는 것)

ren *.txt *.doc

 

Comments