답변1
for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done
출력이 올바른 것으로 보이면 echo
위 명령을 삭제하세요.
요령은 ${F%_*}
마지막 것을 삭제 _26
하고 ${F##*_}
마지막 것 이전의 모든 것을 삭제하는 것 입니다 _
. 어떻게 작동하는지 보려면 다음 명령을 시도해보세요. 이제 구분 기호는 다음과 같습니다 :
.
echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"
답변2
사용sed
for file in *_*
do
echo mv $file $( sed 's/\(.*\)_/\1\./' <<< $file)
done
echo
만족스러우면 삭제하세요.
답변3
sed
줄 끝 표시( )를 사용하여 마지막 블록을 바꿀 수 있습니다 $
.
#/bin/bash
for file in *_* ; do
#any alphanumeric string as suffix
mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/.\1/' <<< $file )
#alternatively numbers only as in given input sample
mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done
AFAIK \{1,\}
이전 목록의 "하나 이상" 비트는 GNU이지만 sed
이 제한 사항에 대해 100% 확신할 수는 없습니다.