我有一个文件的相对路径。我想切换到文件所在的目录。有什么办法可以做到吗?
我尝试了多种“查找”组合,但没有成功。
答案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
任何位置(尽管不在隐藏目录中,除非添加限定符),并查找第一个找到的文件的父级(按字母顺序;您可以使用或限定符来选择不同的顺序)。D
cd
o
O
:h
是一个修饰符来获取头文件的(目录名)。这来自csh
70 年代末,也可以在vim
或 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%/*}"