확장자 없이 파일 이름을 바꾸는 방법

확장자 없이 파일 이름을 바꾸는 방법

응용 프로그램이 이해할 수 있도록 프로그래밍 방식으로 이름을 바꿔야 하는 파일이 많이 있습니다.

형식은 다음과 같습니다. 이름을 바꿀 파일

끝부터 첫 번째 _까지 잘라서 점(.)으로 바꿔야 합니다.

파일 이름의 길이나 파일 이름의 _ 개수를 미리 모르므로 awk/sed/cut에 대한 아이디어가 있습니까?

답변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% 확신할 수는 없습니다.

관련 정보