Shell-Script

在目前工作目錄的最近祖先中查找特定文件

  • January 22, 2019

我想找到一種通過在目錄結構中向上查找來查找給定文件的方法,而不是遞歸地搜尋子目錄。

有一個節點模組似乎完全符合我的要求,但我不想依賴安裝 JavaScript 或類似的包。這個有shell命令嗎?一種方法來find做到這一點?還是我無法通過Google搜尋找到的標準方法?

這是通用 shell 命令中find-config 算法的直接翻譯(在 bash、ksh 和 zsh 下測試),其中我使用返回碼 0 表示成功,使用 1 表示 NULL/失敗。

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
}

範例執行,設置被盜複製並擴展自Stephen Harris的回答:

$ 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

引用自:https://unix.stackexchange.com/questions/293393