밑줄 앞과 뒤에 오는 내용을 전환하여 파일 이름을 다시 관리합니다.

밑줄 앞과 뒤에 오는 내용을 전환하여 파일 이름을 다시 관리합니다.

일부 파일의 이름을 다음 형식으로 바꾸고 싶습니다.

ABCD_20181102.jpg
DEDE_2_20181030.jpg

일반적으로 4개의 임의 문자로 구성되며 그 뒤에 밑줄과 날짜(년, 월, 일)가 표시됩니다. 또는 임의의 문자 4개, 밑줄, 임의의 숫자, 밑줄, 날짜 순입니다.

이 파일의 이름을 날짜(또는 필요한 경우 임의의 숫자)로 바꾸고 다음과 같은 임의의 문자로 바꾸고 싶습니다.

20181102_ABCD.jpg
20181030_2_DEDE.jpg

답변1

매개변수 확장을 사용하여 문자열의 일부를 추출할 수 있습니다. #왼쪽에서 제거하고, %오른쪽에서 제거하고, 기호를 두 배로 늘리면 가능한 가장 긴 일치 항목이 제거됩니다.

#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
    suffix=${f#*.}
    before_underscore=${f%%_*}
    after_underscore=${f#*_}
    after_underscore=${after_underscore%.$suffix}
    if [[ $after_underscore = *_* ]] ; then
        before2=${after_underscore%_*}
        after2=${after_underscore#*_}
        after_underscore="$after2"_"$before2"
    fi
    echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done

스크립트가 요구 사항을 충족하는지 확인한 후 echo이전 콘텐츠를 제거하면 됩니다.mv

답변2

Larry Wall 이름이 변경된 경우

rename -n -e 's/.*_.*/$2_$1/' «file list»

-n출력에 올바르게 실행될 것으로 표시되면 제거하여 활성화하세요. (위의 내용은 수행할 작업을 설명하지만 수행하지는 않습니다.)

답변3

그리고 mmv:

$ mmv -n '*_*.jpg' '#2_#1.jpg'
ABCD_20181102.jpg -> 20181102_ABCD.jpg
DEDE_2_20181030.jpg -> 2_20181030_DEDE.jpg

( -n올바른 작업을 수행하고 있다고 확신하면 제거하십시오).

관련 정보