문자열에서 파일 확장자를 제거하는 가장 좋은 방법은 무엇입니까?

문자열에서 파일 확장자를 제거하는 가장 좋은 방법은 무엇입니까?

그래서 저는 비디오를 webm 형식으로 변환하기 위해 제가 작성한 스크립트를 사용하고 있습니다. 프로그램은 %f다음과 같이 비디오의 전체 절대 파일 이름을 보내는 스크립트를 호출합니다.

converter.sh %f

%f두 가지 가능한 확장자 .avi가 있습니다 .mpg.

# /bin/bash
ffmpeg -i $1 `dirname $1``basename $1 avi`webm && rm $1

현재 확장명이 제거되었기 때문에 파일을 $1포함할 .avi때 완벽하게 작동합니다 . 반대로 끝나는 경우 결과는 입니다 .basename.avi$1.mpg.mpgwebm

이 두 가지 가능한 형식을 허용하도록 이 스크립트를 어떻게 수정합니까?


복구: $1그렇다면 /somedir/video.avi스크립트는 다음을 수행해야 합니다.

ffmpeg -i /somedir/video.avi /somedir/video.webm

그렇다면 스크립트는 다음을 수행해야 합니다 $1./somedir/video.mpg

ffmpeg -i /somedir/video.mpg /somedir/video.webm

나는 이것이 어떤 사람들에게는 어리석게 보일 수도 있다는 것을 알고 있지만 나는 bash를 처음 접했습니다.

답변1

대부분의 쉘에서 제공하는 대체 메커니즘을 사용할 수 있습니다.

B=$(basename "$1"); D=$(dirname "$1");
ffmpeg -i "$1" "$D/${B%.*}.webm" && rm "$1"

실제로 대체를 통해 모방 할 basename수도 있습니다.dirname

참고: .*에서 접미사를 직접 삭제하세요 this.dir/file.

관련 정보