Linux filename 일괄 변경 툴(Python)

 

한번에 여러 파일명을 변경하고자 하는 경우가 있을 것이다.
이전에 rename명령을 통해 파일명을 일괄 변경하는 방법을 소개하였지만
이는 파일명이 제각각인 경우 원하는 형태로의 변경이 어렵다.
ex) qwer.c, asdf.c, zxcv.c 와 같은 경우

따라서 특정 format에 맞추어 파일이름을 변경하고, 확장자의 변경도 가능하며 파일 이름을 변경할 확장자를 지정할 수 있는
file_rename_tool을 개발해보았다.

send me email if you have any questions.


소스코드

import os, sys
import subprocess

### 상수 선언 ###
CONST_COMMAND = "ls" # 현재 디렉터리의 파일내역 출력

# Python에서 외부 명령어를 실행하고 결과를 가져오는 메소드
def getCallResult(CONST_COMMAND):
    fd_popen = subprocess.Popen(CONST_COMMAND.split(), stdout = subprocess.PIPE).stdout
    data = fd_popen.read()
    fd_popen.close()
    return data

# file이름을 일괄 변경하는 메서드
def file_rename(arg1, arg2, arg3):
    fname = getCallResult(CONST_COMMAND)
    fname = fname.decode("utf-8")

    num = 1

    while(True):
        index = fname.find('\n')

        if(index == -1):
            break

        filename = fname[:index]
        fname = fname[index + 1:]
        
        # 이 프로그램과 이름 변경대상이 아닌 확장자의 경우 변경대상에서 제외
        if(filename.find('.' + arg3) == -1 or filename == 'file_rename.py'):
            continue

        cmd = "mv " + filename + ' ' + arg1 + str(num) + '.' + arg2
    
        os.system(cmd)

        num += 1

# argv[1] -> filename format
# argv[2] -> 확장자
# argv[3] -> 변경대상 확장자
file_rename(sys.argv[1], sys.argv[2], sys.argv[3])

file_rename_tool의 기본 사용법은
$ python3 file_rename_tool argv[1] argv[2] argv[3] 이다.
전달 인자는 차례로 변경할 파일이름 format, 변경할 확장자, 변경대상 확장자 이다.


그림1
사용 예제1


그림2
사용 예제2