Bashスクリプトでbasenameコマンドを使用する
Bashスクリプトでのbasenameコマンドの使用
Bashスクリプトでは、最も一般的なタスクの1つはファイルパスの操作です。特に、フルパスからファイル名だけを抽出したいときに便利です。そこで、basenameコマンドが登場します。一見シンプルに見えますが、basenameは、より複雑なスクリプト、オートメーションツール、ホスティングサービス、CI/CD環境で正しく使用すると強力なユースケースを持ちます。
basenameとは何ですか?
basenameコマンドは、ディレクトリパスを削除し、オプションでファイル拡張子を取り除き、ファイルパスの最終コンポーネントであるベース名のみを残します。
🔧 基本構文:
basename [path] [suffix]✅ シンプルな例:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
スクリプトで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または:





