更改到文件所在的目录

更改到文件所在的目录

我有一个文件的相对路径。我想切换到文件所在的目录。有什么办法可以做到吗?

我尝试了多种“查找”组合,但没有成功。

答案1

使用dirname

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

或者

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

使用shell语法:

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

答案2

zsh而不是bash

cd /path/to/file(:h)

或者:

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

要在当前目录下递归查找file任何位置(尽管不在隐藏目录中,除非添加限定符),并查找第一个找到的文件的父级(按字母顺序;您可以使用或限定符来选择不同的顺序)。DcdoO

:h是一个修饰符来获取文件的(目录名)。这来自csh70 年代末,也可以在vim或 in 中找到bash(尽管仅适用于那里的历史扩展)。(...)不过,Glob 限定符(内部用于进一步限定或修改 glob 的部分)是特定于 zsh 的。

使用bashGNU 工具,您可以执行以下操作:

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%/*}"

相关内容