Bash でファイル名と拡張子を抽出する

概要

Bash でファイルのファイル名と拡張子を抽出する理由はさまざまです。

  • ファイル名または拡張子を操作するには – ファイル名にプレフィックスやサフィックスを追加したり、ファイル拡張子を変更したりするなど、変更するためにファイル名または拡張子を抽出することが必要な場合があります。

  • 一意の名前を持つファイルを作成するには – ファイル名にタイムスタンプや乱数を追加するなどして、一意の名前を持つ新しいファイルを作成するために、ファイル名と拡張子を抽出することができます。

  • スクリプトまたはコマンドでファイル名または拡張子を使用するには – ファイル名または拡張子を抽出して、スクリプトまたはコマンドの引数または入力として使用する(プログラムに渡す場合や、ディレクトリと同じ名前のファイルを作成する場合など)場合があります。

  • ファイル名または拡張子から情報を抽出するには – 日付やファイルの種類などの情報を抽出するために、ファイル名または拡張子を抽出することが必要な場合があります。

この記事では、Bash でファイル名とファイル拡張子を抽出する最も一般的な 3 つの方法を見ていきます。それぞれについて説明し、長所と短所を示します。これにより、どのアプローチが自分に最も適しているかについて知識に基づいた決定を下すことができます。

方法1:を使用する ベース名 Command

  basename コマンドを使用して、ファイル パスからファイル名と拡張子を抽出できます。

filename=$(basename /path/to/file.txt)
echo $filename

この方法は非常にシンプルで使いやすいですが、残念ながら、後処理を行わずにファイル名だけ (拡張子なし) を抽出する方法はありません。

使用することもできます dirname ディレクトリ パスを個別に抽出するコマンド:

directory=$(dirname /path/to/file.txt)
echo $directory

長所:
  • 使いやすいです
  • スペースを含むファイル名を正しく処理します
短所:
  • ファイル名のみを抽出し、追加の処理を行わないと拡張子を個別に抽出することはできません。

方法 2: パラメータ拡張を使用する

Bash には、と呼ばれる機能が用意されています。 パラメータ拡張を使用すると、特別な構文を使用して変数の一部を抽出できます。たとえば、次の構文を使用して、変数に格納されているファイル パスからファイル名と拡張子を抽出できます。

filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename

パラメータ拡張を使用して拡張子を個別に抽出することもできます。

extension=${filename##*.}
echo $extension

長所:
  • 柔軟性
  • ファイル名と拡張子の両方を個別に抽出できます。
  • スペースを含むファイル名を正しく処理します
短所:
  • ファイルパスを保存するには変数が必要です

方法3:を使用する awk command

  awk コマンドは、文字列の一部を抽出するために使用できる強力なテキスト処理ツールです。たとえば、次の構文を使用して、ファイル パスからファイル名と拡張子を抽出できます。

filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

使用することもできます awk 拡張子を個別に抽出するには:

extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension

長所:
  • 強力な
  • ファイル名と拡張子の両方を個別に抽出できます
  • スペースを含むファイル名を正しく処理します
短所:
  • 構文は一部のユーザーにとって馴染みのないものである可能性があります
  • ファイルパスをパイプする必要があります awk

まとめ

全体として、Bash でファイルのファイル名と拡張子を抽出することは、Bash シェルでファイルを操作したり、さまざまなタスクを実行したりする場合に便利な手法です。

前述の各方法には独自の長所と短所があり、最適な選択は特定のニーズと好みによって異なります。多くの場合、自分の状況に最も適したものを選択できるように、複数のアプローチに慣れておくと役立ちます。

タイムスタンプ:

より多くの スタックアバス