转到文件路径的目录

转到文件路径的目录

有没有一种方法cd可以让命令接受常规文件路径并跳转到该文件所在的目录?

你可以做的图像: vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module cd <alt>+<.> # for last command argument git add <alt>+<.>

很乐意

答案1

这是一种输入量少一点的方法,但你需要小心一点。它涉及!$历史引用(jcbermu 也使用过),这意味着最近命令的最后一个字。(这在大多数 shell 中都可用:当然bashcshtcsh。)附加:h修饰符以删除尾随的文件名组件,只留下Head,你的命令是cd !$:h

在以下示例中,粗体文本就是您输入的内容:

~ $vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module
                (编辑文件)
~ $光盘 !$:h
cd /usr/share/drupal7/sites/all/modules/legacy
/usr/share/drupal7/sites/all/modules/legacy $

它可以处理目录名中的空格,直到达到一定程度:

~ $vim /usr/share/drupal7/sites/all/modules/old\ code/legacy.module
                (编辑文件)
~ $光盘 !$:h
cd /usr/share/drupal7/sites/all/modules/old\ 代码
/usr/share/drupal7/sites/all/modules/旧代码 $

或者

~ $vim /usr/share/drupal7/sites/all/modules/“旧代码”/legacy.module
                (编辑文件)
~ $光盘 !$:h
cd /usr/share/drupal7/sites/all/modules/“旧代码”
/usr/share/drupal7/sites/all/modules/旧代码 $

/但是,我认为一个好的普遍说法是,如果文件名中的最后一个被引用,它就会失败:

~ $vim“/usr/share/drupal7/sites/all/modules/旧代码/legacy.module”
                (编辑文件)
~ $光盘 !$:h
cd“/usr/share/drupal7/sites/all/modules/旧代码
>Ctrl+C        (Shell 要求输入后续文本
                    因为它看到一个不匹配的引号字符。)

如果文件位于当前目录中,它也会失败:

~ $vim 遗留模块
        (编辑文件)
~ $光盘 !$:h
cd 遗留模块
-bash:cd:legacy.module:没有此文件或目录
~ $                 :H 没有效果,因为 !$ 不包含 /

但这很简单。如果文件位于当前目录中,则根本不会执行此操作cd。另一个问题是,如果您将文件名放入变量中:

~ $fn=/usr/share/drupal7/sites/all/modules/legacy/legacy.module
~ $vim“$fn”
        (编辑文件)
~ $光盘 !$:h
cd“$fn”
-bash:cd:/usr/share/drupal7/sites/all/modules/legacy/legacy.module:不是目录
~ $                 :H 没有效果,因为 !$ (即 “$fn”)不包含 /

您可以按如下方式处理:

~ $fn=/usr/share/drupal7/sites/all/modules/legacy/legacy.module
~ $vim
        (编辑文件)
~ $cd“${fn%/*}”
/usr/share/drupal7/sites/all/modules/legacy $

正如其他答案所建议的,使用."$PWD"作为git add命令。

答案2

两个步骤:

创建一个包含的 shell 脚本“cdfile” cd "$(dirname "$1")",使其可执行,并将其放在可以找到它的地方。

现在使用

vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module
cdfile <alt>+<.> # for last command attribute
git add .

答案3

有一种方法可以从文件名中提取目录名称,它被称为 dirname

cd `dirname /your/file/path`

答案4

cd这是进入二进制目录的一种快速而又肮脏的方法......

> cd "$(dirname "`which bash`")"

相关内容