現在の作業ディレクトリの最も近い祖先で特定のファイルを探します。

現在の作業ディレクトリの最も近い祖先で特定のファイルを探します。

findで特定のファイルを見つける方法を見つけたいです。戻るサブディレクトリを再帰的に検索するのではなく、ディレクトリ構造で検索します。

一つあるノードモジュールが私が望むものを正確に実行しているようです。しかし、JavaScriptや同様のパッケージのインストールに依存したくありません。これを実行できるシェルコマンドはありますか?これを行う方法はありますかfind?それともグーグルで見つけることができない標準的な方法ですか?

ベストアンサー1

直役な内容です構成アルゴリズムの検索通常のシェルコマンド(bash、ksh、zshでテスト済み)では、成功には戻りコード0を使用し、NULL /失敗には1を使用します。

findconfig() {
  # from: https://www.npmjs.com/package/find-config#algorithm
  # 1. If X/file.ext exists and is a regular file, return it. STOP
  # 2. If X has a parent directory, change X to parent. GO TO 1
  # 3. Return NULL.

  if [ -f "$1" ]; then
    printf '%s\n' "${PWD%/}/$1"
  elif [ "$PWD" = / ]; then
    false
  else
    # a subshell so that we don't affect the caller's $PWD
    (cd .. && findconfig "$1")
  fi
}

実行例、盗まれた設定のコピーと拡張スティーブン・ハリス答え:

$ mkdir -p ~/tmp/iconoclast
$ cd ~/tmp/iconoclast
$ mkdir -p A/B/C/D/E/F A/good/show 
$ touch A/good/show/this A/B/C/D/E/F/srchup A/B/C/thefile 
$ cd A/B/C/D/E/F
$ findconfig thefile
/home/jeff/tmp/iconoclast/A/B/C/thefile
$ echo "$?"
0
$ findconfig foobar
$ echo "$?"
1

おすすめ記事