文字列からファイル拡張子を削除する最良の方法は何ですか?

文字列からファイル拡張子を削除する最良の方法は何ですか?

だから私はビデオをwebm形式に変換するために私が書いたスクリプトを使用しています。プログラムは、%f次のようにビデオの絶対ファイル名全体を送信するスクリプトを呼び出します。

converter.sh %f

%f2つの可能な拡張子.aviがあります.mpg

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

現在の拡張子が削除されているため、ファイルを$1含める.aviと完全に機能します。逆に終わる場合、結果はです。basename.avi$1.mpg.mpgwebm

この2つの可能な形式を許可するようにこのスクリプトをどのように変更しますか?


回復処置:$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

おすすめ記事