linux快速切换目录命令,linux用命令行快速切换目录

和很多人一样,我也是在电脑前度过一天的大部分时间。为了提高效率(并且不让我的身体有太多的抱怨),我试着建立一个优化的环境。例如,我使用Vim写代码,使用Vimperator浏览网页,使用 i3 窗口管理器。其他日常事情就是文件系统导航(从一个目录切换到另一个目录——译者注)。我更喜欢使用命令行来,但是一遍又一遍的输入 cd ~/some/very/deep/often-used/directory 变得很麻烦。

像autojump、z 和 fasd 这样的自动工具,通过提供一个指向你常用文件夹的快捷方式来处理这个问题。就我个人来说,我希望有一个更加手动的方法,我将这个方法向大家分享。我发现用这个方法后,效率有很大的提高,并且希望你们也能提高效率。

使用符号链接跳转

实际上这个手工解决方案总结起来是在一个隐藏文件夹下(例如 ~/.marks)储存符号链接.这里有4个shell函数:jump, mark, unmark, 和marks:

exportMARKPATH=$HOME/.marks

function jump {

cd -P "$MARKPATH/$1" 2>/dev/null || echo "No such mark: $1"

}

function mark {

mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$1"

}

function unmark {

rm -i "$MARKPATH/$1"

}

function marks {

ls -l "$MARKPATH" | sed 's/  / /g' | cut -d' ' -f9- | sed 's/ -/\t-/g' && echo

}

将它们放在你的.zshrc或.bashrc 文件,你就可以开始跳转了(Mac OS X用户需要一个稍微有些不同的makes函数版本,请见下方)。我也把这转换成了一个叫做jump的oh-my-zsh插件,但是这玩意目前还在pull-request。为了添加一个新书签,cd到目录然后使用一个你喜欢的名字标记上它。

$ cd ~/some/very/deep/often-used/directory

$ mark deep

这段文字将在目录~/.marks中添加一个叫做deep的符号链接。跳转到这个目录,在文件系统中的任何地方输入以下命令。

$ jump deep

移除标签(即符号链接),输入:

$ unmark deep

你可以通过输入如下指令来浏览所有的标签

$ marks

deep    ->/home/johndoe/some/very/deep/often-used/directory

foo     ->/usr/bin/foo/bar

没了

添加tab补齐

为了给jump和unmark函数添加Tab补齐,添加如下代码到.zshrc中(感谢tiziano88):

function _completemarks {

reply=($(ls $MARKPATH))

}

compctl -K _completemarks jump

compctl -K _completemarks unmark

或者添加如下代码到.bashrc中(感谢microcolonl)

_completemarks() {

local curw=${COMP_WORDS[COMP_CWORD]}

local wordlist=$(find $MARKPATH -type l -printf "%f\n")

COMPREPLY=($(compgen -W '${wordlist[@]}' -- "$curw"))

return 0

}

complete -F _completemarks jump unmark

现在如果你输入jump或者unmark 然后回车,你会看见一个所有可用的标签.碉堡了!

给Mac OS X>用户:

如guygurari指出的,Mac OS X用户需要一个稍微有些不同的makes函数版本:

function marks {

\ls -l "$MARKPATH" | tail -n +2 | sed 's/  / /g' | cut -d' ' -f9- | awk -F ' ->' '{printf "%-10s ->%s\n", $1, $2}'

}

译者注:

此功能Windows下也可以实现。做4个批处理 :jump.bat、mark.bat、unmark.bat、marks.bat。每个BAT的内容如下:

jump.bat:

@echo off

set MARKPATH=%~dp0.marks

if [%1]==[] goto err

if not exist "%MARKPATH%/%1" (echo "No such mark: %1") else cd "%MARKPATH%/%1"

:err

echo Type a mark, please.

mark.bat

@echo off

set MARKPATH=%~dp0.marks

set TAR=%cd%

if not exist %MARKPATH% ( goto makedir ) else ( goto makelink )

:makedir

md %MARKPATH%

attrib +h %MARKPATH%

goto makelink

:makelink

cd %MARKPATH%

mklink /j %1 %TAR%

cd %TAR%

unmark.bat

@echo off

set MARKPATH=%~dp0.marks

rd %MARKPATH%\%1

marks.bat

@echo off

set MARKPATH=%~dp0.marks

echo mark list:

dir /b %MARKPATH%

将4个BAT都放在系统环境变量%PATH%中任意一个目录下,或者将bat文件所在目录添加进%PATH%中就行了。因为Window在 vista/win7在引入这个功能,因此只能在vista/win7以上的系统中使用。还有一点不一样的是,链接文件保存在bat文件所在目录下 的.marks隐藏文件夹下,而不是某个系统文件夹,这样在删除的时候也不用乱找了。

使用的时候和上述描述一样,使用如下命令:

跳转:

jump markname

mark markname

unmark markname

marks

就是marks的功能就没有那么强了。。。

原文链接:http://jeroenjanssens.com/2013/08/16/quickly-navigate-your-filesystem-from-the-command-line.html

译文链接:http://blog.jobbole.com/46258/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值