我刚刚在听讲座,我注意到讲师使用命令(可能是别名)跳转到特定的文件夹。
例子:
~/code$ j sciproj
~/projects/sciproj2011/$
这看起来相当漂亮,所以我开始好奇:
这是一个标准实用程序吗?如果是,其名称是什么?
对于其工作原理我有两种理论:
它可以按照示例样式直接从命令行创建、删除和跳转到别名,而无需手动在配置文件或脚本等中设置别名。
它在主目录中搜索与名称匹配的文件夹并跳转到该文件夹。
然而,第二种选择似乎有点慢,因此第一种选择更受欢迎。
答案1
答案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
通常,您可以使用popd
、pushd
和dirs
在某些文件夹之间跳转。但在您的情况下,它是一些您可以在 ~/.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_配置文件文件。