芽萌丸プログラミング部@programming
投稿日 2024/11/27
更新日 2024/11/27 ✏

bash: ディレクトリを遡って特定のファイルがあった場所を取得

あるディレクトリから上方向へ遡りながら特定のファイルがあるパスを探すbashスクリプト。

#!/usr/bin/env bash

#
# 指定ディレクトリから上へ遡りながら
# 指定ファイルが存在するディレクトリパスを発見します。
# 
# Argument:
# <検索対象ファイル名> e.g. test.txt
# <検索開始地点パス> /path/to/start/searching/file/for/dir/
# 

# 引数1: 探し出したいファイル名
file=$1
# 引数2: 検索開始位置ディレクトリ
dir=$(realpath $2) # NOTE: 相対パスが渡されても絶対パスに統一

# 指定ファイルが見つかったディレクトリを格納する変数
found=""

# 一番上の階層"/"までループ
until [ "$dir" = "/" ]; do
  # ファイルが見つかったらループを抜ける
  if [ -f "${dir}/${file}" ]; then
    found=${dir}
    break;
  fi
  # ひとつ上の階層へ移動
  dir=$(realpath -q "${dir}/..") 
done

# 結果を標準出力
echo "${found}"

END


芽萌丸プログラミング部
芽萌丸プログラミング部@programming
プログラミング関連アカウント。Web標準技術を中心に書いていきます。フロントエンドからサーバサイドまで JavaScript だけで済ませたい人たちの集いです。記事は主に @TanakaSoftwareLab が担当。