Directory

如何找到具有給定名稱的祖先目錄?

  • March 28, 2020

如何找到具有特定名稱的父目錄的路徑?例如,假設我有目錄/a/b/c/d/e/f/g,我想找到帶有 name 的父目錄c,我希望它返回/a/b/c

案例是我在一個相當嵌套的目錄結構中,我不想有難以閱讀的字元串../../..,當我更新嵌套級別時,我還需要確保更改以後的目錄結構。

不是一個破壞者,但如果有兩個具有給定名稱的祖先目錄,我理想情況下想要一個路徑最長的目錄。即/a/b/c/d/e/c/f/g理想情況下應該返回/a/b/c/d/e/c而不是/a/b/c.

解決方案是使用參數替換,兩次。

我們首先將目錄的路徑名儲存在一個變數中(如果您正在處理目前工作目錄,您可以跳過它並PWDp以後使用):

$ p=/a/b/c/d/e/c/f/g

然後我們可以從中刪除匹配的最長前綴字元串*/c/

$ echo "${p##*/c/}"
f/g

然後我們意識到,如果從末尾刪除這個結果,$p我們將得到我們想要的結果:

$ echo "${p%${p##*/c/}}"
/a/b/c/d/e/c/

或者,也刪除該決賽/

$ echo "${p%/${p##*/c/}}"
/a/b/c/d/e/c

標準參數分別替換 和刪除最長匹配前綴字元串${variable##pattern}${variable%pattern}最短匹配後綴字元串。

(要獲得/a/b/c您不想要的 ,您可以###“內部”替換中使用)

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