bash:ファイル拡張子を返す方法は?

bash:ファイル拡張子を返す方法は?

入力ファイル名の拡張子のみを返すスクリプトを作成したいと思います。たとえば、textfile.txt を返す必要がありますtxt

私はLinuxとbashに初めて触れ、基本的なスクリプトを書く方法を学びたいと思います。ありがとうございます!

ベストアンサー1

bashのようなシェルにはいくつかあります。文字列演算特徴。そのうちの1つを使用すると、特定のパターンより前のすべてのアイテムを削除できます。

${VAR##GLOB}

$VAR上記の構文は、globと最初に一致するまで変数からすべてを削除しますGLOB。したがって、ファイル名を表示せずにファイル拡張子を印刷するには、次のようにします。

$ file="file.txt"
$ echo ${file##*.}
txt

これは複数の「拡張」を処理することもできます。

$ file="file.new.txt"
$ echo ${file##*.}
txt

これを望まない場合は、代わりに1つを使用してください。これにより#、最長一致の代わりに最短一致が削除されます。

$ echo ${file#*.}
new.txt

ディレクトリ内のすべてのファイルに対してこのコマンドを実行するには、次の手順を実行できます。

$ ls 
file.avi  file.pdf  file.png  file.txt
$ for file in *; do echo "$file : ${file##*.}"; done
file.avi : avi
file.pdf : pdf
file.png : png
file.txt : txt

また、完全性のために、以下を使用して拡張子なしでファイル名を取得することもできます${file%.*}

$ for file in *; do echo "$file : ${file##*.} : ${file%.*}"; done
file.avi : avi : file
file.pdf : pdf : file
file.png : png : file
file.txt : txt : file

おすすめ記事