Linux

切換到文件所在的目錄

  • May 18, 2021

我有一個文件的相對路徑。我想切換到文件所在的目錄。有什麼辦法嗎?

我嘗試了多種“查找”組合,但沒有成功。

使用dirname

cd "$(dirname "/path/to/file")"

或者

file="/path/to/file"
cd "$(dirname "$file")"

使用shell語法:

file="/path/to/file"
cd "${file%/*}"

zsh而不是bash

cd /path/to/file(:h)

或者:

cd -- **/file([1]:h)

在目前目錄下遞歸查找file任何位置(儘管不是在隱藏目錄中,除非您添加限定符),並查找第一個文件的父級(按字母順序;您可以使用or限定符選擇不同的順序)找到的文件。D``cd``o``O

:h是獲取文件(目錄名)的修飾符。這來自csh於 70 年代後期,也可以在 invim或 in 中找到bash(儘管僅適用於那裡的歷史擴展)。Glob 限定符(內部(...)進一步限定或修改 glob 的部分)是 zsh 特定的。

使用bash和 GNU 工具,您可以做一些接近的事情:

IFS= read -rd '' dir <(
 LC_ALL=C find . -name '.?*' -prune -o -name file -printf '%h\0' |
   sort -z
) && cd "$dir"

或者:

shopt -s globstar # enable zsh-style recursive globbing though
                 # it's still somewhat buggy in bash
shopt -s failglob

files=(./**/file) && cd "${file%/*}"

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