파일 이름의 특정 부분 이름을 소문자에서 대문자로 바꿉니다.

파일 이름의 특정 부분 이름을 소문자에서 대문자로 바꿉니다.

다음과 같은 이름의 여러 파일이 있는 디렉터리가 있습니다.

London_qle_merged
Paris_qle_merged
Tokyo_qle_merged
London_qle_obs
Paris_qle_merged
Tokyo_qle_merged

파일 이름에 *merged가 포함된 파일의 이름을 바꾸는 방법은 다음과 같습니다.

London_Qle_merged
Paris_Qle_merged
Tokyo_Qle_merged

나는 다음과 같이 루프를 수행할 수 있다는 것을 알고 있습니다.

for name in Paris London Tokyo do;
  mv ${name}_qle_merged ${name}_Qle_merged
done

그런데 다른 방법은 없나요?

답변1

틀림없이. ksh/Bash/zsh에서:

for f in *_merged; do
    mv -- "$f" "${f/_qle_/_Qle_}" 
done

또는 표준 주택에 있습니다.

for f in *_qle_merged; do
    mv -- "$f" "${f%_qle_merged}_Qle_merged" 
done

예를 들어 참조하십시오.BashGuide의 매개변수 확장

답변2

나는 awk와 tr의 조합으로 이것을 달성했습니다.

주문하다

find . -type f -iname "*merged" |tr -d "./" | awk -F "_" '{print "mv" " " $1"_"$2"_"$3 " " $1"_"toupper(substr($2,1,1))substr($2,2)"_"$3 }' | sh

아래는 병합된 파일입니다

London_qle_merged
Paris_qle_merged
Tokyo_qle_merged 

다음으로 이름 바꾸기

London_Qle_merged
Paris_Qle_merged
Tokyo_Qle_merged

답변3

그러면 스크립트 루프 없이 작업이 수행되고 하위 프로세스가 생성됩니다.

rename 's/qle/Qle/' *_merged

답변4

명령 rename은 당신의 친구입니다. sed파일 이름으로 사용됩니다 . (Larry Wall 버전이 있는지 확인하세요. 이 이름을 가진 프로그램이 두 개 이상 있습니다.)

아래 답변은 파일 내용에 대한 것이므로 sed를 사용하여 재사용했습니다 rename. https://unix.stackexchange.com/a/211579/4778

rename  -e 's/_(.)/_\u$1/' *_merged

첫 번째 문자 바로 뒤에 오는 문자를 대문자로 만듭니다 _.

이 특정 입력에 대한 더 간단한 솔루션

rename 's/qle/Qle/' *_merged

관련 정보