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

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

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

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

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

파일 이름의 길이나 파일 이름의 _ 숫자를 미리 모르기 때문에 awk/sed/cut을 통해 어떤 아이디어가 있습니까?

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

관련 정보