Bashで拡張子なしのファイル名を読み取る

Read Filename Without Extension Bash



Linuxユーザーは、多くの目的でファイルを定期的に操作する必要があります。ユーザーは、ファイル拡張子を削除するだけでファイルのベース名を読み取る必要がある場合があります。ファイル名と拡張子は、複数の方法でLinuxのさまざまな変数に分離して保存できます。 Bashの組み込みコマンドとシェルパラメーターの展開を使用して、ファイルの拡張子を削除できます。このチュートリアルでは、上記の方法を使用して拡張子のないファイル名を読み取る方法について説明します。

`basename`コマンドを使用してファイル名を読み取る

`basename`コマンドは、ディレクトリまたはファイルパスから拡張子なしでファイル名を読み取るために使用されます。







構文:



ベース名名前[サフィックス]

また



ベース名オプション...名前...

ここで、NAMEには、ファイル名またはフルパスのファイル名を含めることができます。 SUFFIXはオプションであり、ユーザーが削除したいファイル拡張子部分が含まれています。 `basename`コマンドには、以下に説明するいくつかのオプションがあります。





オプション

名前 説明
-に これは、コマンド引数としてパスありまたはパスなしの複数のファイル名を渡すために使用されます。
-NS 削除する必要のあるサフィックスとして拡張子を渡すために使用されます。
-と 各ファイルをnullで区切って、複数のファイル名を表示するために使用されます。
-ヘルプ `basename`コマンドの使用情報を表示するために使用します。
-バージョン バージョン情報を表示するために使用されます。

例-1:NAMEとSUFFIXの使用

次の `basename`コマンドは、拡張子が付いたファイル名を取得します。このコマンドではSUFFIXは省略されています。ここで、出力は ‘product.txt’



$ベース名 //ファミダ/コード/product.txt

拡張子なしでファイル名を取得したい場合は、 `basename`コマンドでファイル拡張子をSUFFIXとして指定する必要があります。ここで、拡張子は.txtです。次のコマンドを実行して、ファイルから拡張子を削除します。

$ベース名 //ファミダ/コード/product.txt .txt

例2:「-a」オプションとNAMEの使用

この例では、 `basename`コマンドの「-a」オプションの使用を示しています。ここでは、2つのファイルパスが `basename`コマンドで引数として渡されます。拡張子が付いた各ファイル名はパスから取得され、改行で出力されます。

$ベース名 -に //ファミダ/index.html//ファミダ/コード/emp.txt

例-3:「-z」オプションとNAMEの使用

「-z」オプションを `basename`コマンドとともに使用して、改行の代わりにnull値で複数のファイル名を出力します。次のコマンドは、「-a」と「-z」の2つのオプションを一緒に使用します。ここでは、2つのファイル名、 index.htmlemp.txt スペースや改行なしで印刷されます。

$ベース名 -NS //ファミダ/index.html//ファミダ/コード/emp.txt

例-4:「-s」オプションとNAMEの使用

次のコマンドは、 `basename`を使用したSUFFIXの代わりに使用できます。ファイルからファイル拡張子を削除するには、ファイル拡張子を「-sh」オプションで渡す必要があります。次の例では、ファイル「addition.sh」から拡張子「-sh」を削除します。

$ベース名 -NS.shaddition.sh

例-5:SUFFIXなしでファイル拡張子を削除する

ファイル名から削除するファイルの拡張子がわからない場合は、この例が問題の解決に役立ちます。名前の付いたファイルを作成します read_file.sh 次のコードを使用して、拡張子のファイル名を取得します。この例では、 `sed`コマンドを使用してファイル名から任意のタイプの拡張子を削除します。スクリプトを実行すると、出力は「 平均 拡張子 ‘を削除した後’ py '。

read_file.sh

#!/ bin / bash
#パスでファイル名を設定します
ファイル名='/home/fahmida/code/average.py'
#「basname」および「sed」コマンドを使用して、拡張子なしでファイル名を読み取ります
捨てた '$(basename '$ filename' | sed's / (。* ) .. * / 1 / ')'

スクリプトを実行します。

$bashread_file.sh

例-6:ファイル拡張子をtxtからdocxに変換する

拡張子のないファイル名は、ファイルをある拡張子から別の拡張子に変換する必要があります。この例は、bashスクリプトで `basename`コマンドを使用して、すべてのテキストファイル(.txt)の拡張子をワードファイル(.docx)に変更する方法を示しています。次の名前のファイルを作成します。 convert_file.sh 次のコードで。ここでは、for-inループを使用して、次のすべてのテキストファイルを読み取ります。 。txt 現在のディレクトリからの拡張子。拡張子のないファイル名は `basename`コマンドで読み取られ、ループの各反復で.docx拡張子を追加することで名前が変更されます。

convert_file.sh

#!/ bin / bash
#ループは現在のディレクトリから各テキストファイルを読み取ります
にとってファイル名 ls *。txt
NS
#変換前にテキストファイル名を印刷します
捨てた '変換前のファイル名:$ filename'
#ファイルtxtの拡張子をdocxに変更します
mv - '$ filename' '$(basename-'$ filename' .txt).docx '
終わり

スクリプトを実行します。

$bashconvert_file.sh

`ls`コマンドを使用して、テキストファイルが変換されているかどうかを確認します。

$ls

例-7:シェルパラメータ展開を使用して拡張子なしでファイル名を読み取る

シェルパラメーターの展開は、bashで拡張子なしでファイル名を読み取るもう1つの方法です。この例は、シェルパラメータ展開の使用法を示しています。次のコマンドは、ファイルのパス名を変数$に格納します。 ファイル名

$ファイル名='/var/usr/temp/myfile.tar.gz'

次のコマンドは、パスからすべての種類の拡張子を削除し、拡張子のないファイルパスを変数に格納します。 $ file1

$file1='$ {ファイル名%%。*}'

次のコマンドは、パスからのみファイル名を出力します。ここで、出力は「 myfile '。

$捨てた '$ {file1 ## * /}'

ファイル名に2つのドット(。)が付いた2つの拡張子が含まれていて、ファイルの最後の拡張子を削除してファイル名を読み取りたい場合は、次のコマンドを使用する必要があります。ファイルパスを変数に格納する次のコマンドを実行します。 $ file2 ファイルの最後の拡張子を削除します。

$file2='$ {ファイル名%。*}'

次に、次のコマンドを実行して、拡張子が1つのドット(。)のファイル名を出力します。ここで、出力は次のようになります myfile.tar。

$捨てた '$ {file2 ## * /}'

結論

さまざまな目的で、拡張子のないファイル名が必要です。このチュートリアルでは、拡張子のないファイル名の使用法について、ファイル変換などの例を使用して説明します。このチュートリアルは、ファイル名と拡張子をファイルパスから分離する方法を学ぶことに関心のあるユーザーを支援します。ここでは2つの方法について説明します。ユーザーは、これらの方法のいずれかに従って、ファイルパスからのみファイル名を抽出できます。