
답변1
for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done
출력이 올바르면 echo
위의 명령을 제거하십시오.
비결은 ${F%_*}
last 를 제거 _26
하고 ${F##*_}
last 이전의 모든 것을 제거하는 것입니다 _
. 어떻게 작동하는지 보려면 다음 명령을 시도해보세요. 이제 구분 기호는 다음과 같습니다 :
.
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% 확신할 수는 없습니다.