파일 이름의 숫자를 사용하여 많은 수의 파일 이름을 일괄 변경합니다.

파일 이름의 숫자를 사용하여 많은 수의 파일 이름을 일괄 변경합니다.

다음과 같이 파일 이름에 숫자 레이블이 있는 수백 개의 파일 이름이 있습니다.

AAAA #12 SSSS.TXT
BBB #231 CDF.TXT
CDFSDAAAA #1 AAAASS.TXT

다음과 같이 이름을 바꾸고 싶습니다.

#012 - AAAA #12 SSSS.TXT
#231 - BBB #231 CDF.TXT
#001 - CDFSDAAAA #1 AAAASS.TXT

어떻게 해야 하나요?

감사해요

답변1

bash 쉘에서는

for file in *.TXT
do 
  [[ $file =~ \#([[:digit:]]+) ]] && mv -- "$file" "#$(printf '%03d' "${BASH_REMATCH[1]}") - ${file}"
done

이는 현재 디렉토리에서 다음으로 끝나는 모든 파일을 반복하여 .TXTbash의 조건식 연산자와 =~비교합니다 . 전달된 파일 이름을 오른쪽의 정규 표현식과 비교합니다. 정규식은 해시 태그(주석이 아닌 이스케이프 처리됨)와 일부(괄호 안에 캡처된) 숫자를 찾습니다. 탐욕 스럽기 +때문에 첫 번째 숫자가 아닌 숫자(대소문자는 공백)로 끝나는 가능한 많은 숫자(1자리, 4자리 등)가 필요합니다.

Bash는 캡처된 숫자를 저장합니다 ${BASH_REMATCH[1]}(첫 번째 대괄호 세트이기 때문에). 우리는 해당 숫자를 printf3자리까지 0으로 채운 다음 -나머지 이름 바꾸기를 수행하기 위해 추가합니다.

&&이름 바꾸기는 일치가 성공한 경우에만 발생합니다(링크를 통해 ).

답변2

renamePerl 기반 명령이 있는 경우

$ rename -n 's/.*#(\d+).*/sprintf "#%03d - %s", $1, $&/e' *.TXT
rename(AAAA #12 SSSS.TXT, #012 - AAAA #12 SSSS.TXT)
rename(BBB #231 CDF.TXT, #231 - BBB #231 CDF.TXT)
rename(CDFSDAAAA #1 AAAASS.TXT, #001 - CDFSDAAAA #1 AAAASS.TXT)

( -n테스트 목적으로 추가됨)

관련 정보