Shell-Script
在目前工作目錄的最近祖先中查找特定文件
我想找到一種通過在目錄結構中向上查找來查找給定文件的方法,而不是遞歸地搜尋子目錄。
有一個節點模組似乎完全符合我的要求,但我不想依賴安裝 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