快速路径跳跃

快速路径跳跃

我刚刚在听讲座,我注意到讲师使用命令(可能是别名)跳转到特定的文件夹。

例子:

~/code$ j sciproj
~/projects/sciproj2011/$

这看起来相当漂亮,所以我开始好奇:

这是一个标准实用程序吗?如果是,其名称是什么?

对于其工作原理我有两种理论:

  1. 它可以按照示例样式直接从命令行创建、删除和跳转到别名,而无需手动在配置文件或脚本等中设置别名。

  2. 它在主目录中搜索与名称匹配的文件夹并跳转到该文件夹​​。

然而,第二种选择似乎有点慢,因此第一种选择更受欢迎。

答案1

作为对 sagarchalise 评论的补充:

这是 naty 的:http://packages.ubuntu.com/natty/autojump

也应适用于旧版本。

答案2

这个怎么样?

function j() { for dir in ~/projects/$@*; do if [ -d $dir ]; then cd "$dir"; fi; done ;}

它会找到最接近的匹配项。假设我有一个这样的目录列表:

~/projects/
~/projects/apples/
~/projects/apples-and-pears/
~/projects/cabbage/

j a将匹配两个apples*目录,但是正如apples-and-pears后者一样,它将 cd 进入最后一个目录,这就是您最终会到达的位置(该函数的缺陷)。j c将把你放进~/projects/cabbage/

将其塞入终端进行测试,当您满意时,只需将其放在末尾即可~/.bashrc

编辑:我也尝试过制作一个find变体,但效果不太好(速度较慢且不太准确)。不过,您可以随意尝试一下。

function j() { cd $(find ~/projects -maxdepth 1 -type d -name "$@*"); }

答案3

通常,您可以使用popdpushddirs在某些文件夹之间跳转。但在您的情况下,它是一些您可以在 ~/.bash_profile 文件中定义的自定义别名。

例如:

# Change dir via find
# Usage: cdf (dir)
cdf() {
  pushd $(find . -name $1)
}

然后cdf some_dir会跳入文件夹,忽略子目录。

搜索精确文件夹名称的实例(忽略提示):

~/$ cdf() { pushd $(find . -name $1); }
~/$ mkdir -p ab/cd/ef/gh/ij/kl
~/$ cdf kl
    ~/ab/cd/ef/gh/ij/kl ~/
~/$ pwd
     ~/ab/cd/ef/gh/ij/kl
kl$ popd # We're going back to our previous folder.
~/$ pwd
    ~/

对包含部分文本的文件夹使用类似的别名:

cdf() { pushd $(find . -name \*$1\*); }

例子.bash_配置文件文件。

相关内容