Bashスクリプトでbasenameコマンドを使用する
Bashスクリプトでのbasenameコマンドの使用
Bashスクリプトでは、最も一般的なタスクの1つはファイルパスの操作です。特に、フルパスからファイル名だけを抽出したいときに便利です。そこで、basenameコマンドが登場します。一見シンプルに見えますが、basenameは、より複雑なスクリプト、オートメーションツール、ホスティングサービス、CI/CD環境で正しく使用すると強力なユースケースを持ちます。
basenameとは何ですか?
basenameコマンドは、ディレクトリパスを削除し、オプションでファイル拡張子を取り除き、ファイルパスの最終コンポーネントであるベース名のみを残します。
🔧 基本構文:
✅ シンプルな例:
スクリプトでbasenameを使用する理由は?
ここでは、実際のスクリプティングニーズのいくつかの例を示します:
ログ記録:処理中のログファイルの名前を抽出します。
アーカイブ:圧縮アーカイブにファイル名のみを追加します。
オートメーション:ファイルのバッチを処理し、出力ファイル名を生成します。
パイプライン:CI/CDステップでファイル名を抽出します。
Bashスクリプトでの実用的なユースケース
📁 1. ログ記録付きのファイルのループ処理
このスクリプトは、.logファイルをループ処理し、拡張子なしの名前を抽出し、各アクションをログに記録します。basenameは、複雑な文字列スライスなしでファイル名の処理を簡素化します。
📂 2. 動的ファイルパスのためのbasenameの使用
ユーザー入力や他のプロセスからフルパスを受け取るとしましょう:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"

basenameをスクリプトで使用することで、動的ファイルパスを扱う際の柔軟性が確保されます。特に、ログ、設定ファイル、バックアップが異なるディレクトリに存在する可能性のあるLinux VPSのような環境では、スクリプトが堅牢になります。これにより、/var/log/syslogのようなフルパスや、./config.txtのような相対ファイルが渡された場合でも、スクリプトは強力です。
🧪 3. basenameとdirnameの組み合わせ
パス要素を分離するために一緒に使用します:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"
basenameを使用したファイル拡張子の削除
既知の拡張子を削除したい場合:
⚠️ 注意:これは、サフィックスが正確に一致する場合にのみ機能します。したがって、.txtは機能しますが、.TXTや.tar.gzは明示的に指定しない限り機能しません。
複数の拡張子の場合、basenameを他のツールと組み合わせます:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archive
または:
basenameとパラメータ展開
basenameは直感的ですが、サブプロセスを生成します。パフォーマンスが重要なスクリプトや大きなループでは、純粋なBashの代替手段を選択してください:
Bashネイティブの同等物:
ネイティブBashで拡張子を削除:
✅ 外部basenameを呼び出すよりも速いです。
例:ファイルを一括でリネーム
すべての.jpgファイルに今日の日付をプレフィックスとして追加したいとしましょう:







