Bash で大文字と小文字を区別せずにファイル拡張子を削除する

Bash で大文字と小文字を区別せずにファイル拡張子を削除する

Bash スクリプトでを使用してファイルのサフィックスを削除したいですbasename。ただし、このコマンドは大文字と小文字を区別してのみサフィックスを削除します。

大文字と小文字を区別せずに拡張機能を削除するにはどうすればよいですか?

答え1

Bash で拡張機能を削除する場合は、外部ツールを使わずにこれを行うことができます。次に、それを次のように渡しますbasename

$ f=/path/to/some/file.foo.bar
$ basename "${f%.*}"
file.foo

大文字と小文字が混在する拡張機能の場合:

$ f=/path/to/some/file.foo.Bar
$ basename "${f%.*}"
file.foo

ここ%文字列操作内の後ろから、一致する最短の部分文字列を削除しますf。 は.*、大文字と小文字に関係なく、ドットと 0 個以上の文字と一致します。

答え2

パラメータ拡張を使用する

file=/home/johndoe/cv.DOC
basename ${file%.[Dd][Oo][Cc]}

関連情報