다음과 같은 이름의 여러 파일이 있는 디렉터리가 있습니다.
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