Bash でパスと拡張子のないファイルのベース名を抽出する
パスと拡張子なしでファイルのベース名を抽出するには、basename コマンドを bash のパラメーター置換機能と組み合わせて使用できます。 basename コマンドは、パス名の最後のコンポーネントを返します。これは、この場合はファイル名とその拡張子です。ただし、suffix オプションを指定することで、ファイル名から拡張子を取り除くことができます。bash コードの例を次に示します。
#!ビン/バッシュファイルパス = / 家 / アリヤン / bash3.sh
s =$ ( basename $ファイルパス )
エコー ' ${s%.*} '
上記の bash スクリプトは、「」という変数を定義します。 ファイルパス 」とファイルのパスを割り当てます「 /home/aaliyan/bash3.sh 」。次に、スクリプトは basename コマンドを使用して、ファイル パスからファイルのベース名を抽出し、その結果を「s」という変数に割り当てます。
2 番目のパラメーター展開は、'%.*' を使用して、任意の数の文字の後にドットが続く最短の一致を削除することにより、ファイル名から拡張子を削除します。結果の文字列「bash3」は、echo コマンドを使用してコンソールに出力されます。
ファイル パスと拡張子なしでファイルのベース名を抽出する別の方法は、basename コマンドを使用せずにパラメーター展開を使用することです。以下は、パラメーター展開メソッドを使用してファイルなしでファイルのベース名を取得する bash コードの例です。パスとファイル拡張子:
#!ビン/バッシュ
ファイルパス = / 家 / アリヤン / bash3.sh
s = ${ファイルパス##*/}
エコー ' ${s%.*} '
これは、「filepath」という変数を定義し、それに値「 /home/aaliyan/bash3.sh 」。次に、スクリプトは bash のパラメーター展開機能を 2 回使用して、パスと拡張子を除いたファイルのベース名を抽出します。具体的には、最初のパラメーター展開は、'##/' を使用したスラッシュが後に続く任意の数の文字の可能な限り最長の一致を削除することにより、ファイル名からパスを削除します。
結果の文字列「 bash3.sh 」は、「s」という変数に代入されます。 2 番目のパラメーター展開は、'%.' を使用して、任意の数の文字の後にドットが続く最短の一致を削除することにより、ファイル名から拡張子を削除します。結果の文字列「bash3」は、echo コマンドを使用してコンソールに出力されます。
結論
パスと拡張子を付けずにファイルのベース名を抽出することは、bash スクリプトの一般的なタスクです。 basename コマンドを bash のパラメーター置換およびパラメーター展開機能と組み合わせて使用することで、このタスクを簡単に達成できます。これは、ファイルの名前を変更したり、類似した名前のファイルに対して操作を実行したりする場合など、スクリプトでファイル名を操作する場合に役立ちます。