入力ファイル名の拡張子のみを返すスクリプトを作成したいと思います。たとえば、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