切换到给定目录的快捷方式

在Ubuntu终端中,我发现每次计算机启动时都会花费大量时间切换到特定目录。 有什么方法可以让这个过程更容易吗? 是否有一些我可以使用的热键或快速目录更改(如手机上的快速拨号)?

eg: cd 1:Changes to saved directory one 

有两种选择:

  1. 如果你想在每次打开bash终端时都在特定的目录中,编辑你的~/.bashrc文件,只需添加行cd Directory ,例如cd ~/Desktop

  2. 如果你想要几个快捷方式,你总是可以使用全局变量,你可以在你的~/.bashrc文件中设置如下export a=/tmp然后你就可以做cd $a这会给你带来到/tmp

请记住,在编辑.bashrc文件后,您必须重新启动终端或打开一个新终端。

另外看看autojump ,它使用以前访问过的目录构建一个数据库,然后你可以跳转到它。 所以例如你有

 /home/user/this/long/and/annoyingly/deep/directory/workstuff 

然后,如果你曾经访问它,你可以跳过它

 j workstuff 

甚至

 j stuff 

因为它也适用于部分匹配。 如果多个目录匹配,则跳转到最常访问的目录,如果这不是您想要的目录,则重复该命令转到第二个目录。

然而它变得更好! 如果你也有目录

 /home/user/stuff 

你也是

 j stuff 

然后你得到Tab 标签 (按访问次数最多的顺序)

 $ j stuff__ stuff__1__/home/user/this/long/and/annoyingly/deep/directory/workstuff stuff__2__/home/user/stuff 

然后你可以按下你想要的目录号码!

要安装,你可以使用sudo apt-get install autojump ,然后你需要添加

 source /usr/share/autojump/autojump.bash 

到你的~/.bashrc

更多信息请访问: https : //github.com/wting/autojump (还有关于如何从src安装它的说明,它可以获得最新版本)

Bash 别名对于为常用命令创建快捷方式很有用。

  • ~/.bashrc ,添加类似于以下内容的行来创建别名:

     alias jump1='cd /long/path/name/that/is/frequently/used' 
  • 再次关闭并打开终端,或运行source ~/.bashrc

  • 从现在开始,您可以运行jump1来执行该长cd命令。

也可以看看:

  • 如何为cd和ls创建别名?
  • 如何创建永久性Bash别名?

虽然已经有一些好的答案,但我认为我会提到完整性,旧的pushdpopd Bash内置,允许你在文件系统的深层路径中的目录之间快速移动。 与burger.ga提到的autojump书签相比 ,使用pushd创建的目录堆栈只是暂时的。

正如GNU 手册所指出的 , pushdpopd是用于构造临时目录堆栈的Bash内置函数

最近访问过的目录列表。 pushd内置函数在更改当前目录时将目录添加到堆栈中,popd内置函数从堆栈中删除指定的目录,并将当前目录更改为已删除的目录。 目录内置显示目录堆栈的内容。

这需要一些习惯,但在这个博客和这个网站上有很多有用的教程。 命令没有单独的联机帮助页,因为它们包含在Bash联机帮助页中,但是为了快速参考,您可以查看GNU Bash页面。

最清楚的解释是在这篇非常有用的文章中 ,正是我使用pushdpopd

首先,使用dirsdirs -l列出堆栈上的dirs -l ,使用dirs dirs -c清除堆栈。

从某种意义上说,您可以通过输入为要返回的位置添加书签

 pushd /home/mike/Pictures/Canon/2012_07_01 

然后你可以添加更多的目录到堆栈,所以你得到如下的目录列表,其中包括3个指定的文件夹和你的~ home文件夹:

 dirs ~/Downloads/folder/interest ~/Music/artist/album ~ ~/Pictures/Canon/2012_07_01 

实际上你不需要直接使用popd因为它会从堆栈中删除目录; 最好的办法是使用pushd来旋转堆栈,以便您可以在目录之间切换并根据需要对它们进行排序。 有关该有用堆栈旋转的更多信息,请参阅Bash手册页 。

如果您完全按照上面的dirs列表显示堆栈排列, pushd +3会将您切换到特定的Pictures文件夹并将其放置在堆栈顶部(它是+3而不是+4,因为您不计算您的~目录堆栈):

 pushd +3 ~/Pictures/Canon/2012_07_01 ~/Downloads/folder/interest ~/Music/artist/album ~ 

所以提示读,

 ~/Pictures/Canon/2012_07_01$ 

您可以继续执行此操作而无需将其从堆栈中删除,但是除了使用pushd添加到目录堆栈的文件夹之外,任何cd文件夹都将更改目录堆栈。

按目标顺序排列目录堆栈后,可以使用popd快速遍历目录,然后返回到home文件夹; 例如,从Pictures我们可以返回到Downloads

 popd ~/Downloads/folder/interest ~/Music/artist/album ~ 

并提示读取

 ~/Downloads/folder/interest$ 

一般来说,这就是你可以用pushd设置目录堆栈和其中项目的顺序,然后,假设你在每个目录中有三个文件要编辑,你可以用popd立即返回每个文件。将它们从目录堆栈中删除。 然后你的最后一个popd你会回到~ 。 当您拥有特别深的目录并且可以使用它来设置目录堆栈以在它们之间快速移动时,它变得特别有用。

此外,此问题包含一些在使用命令行时可能会发现有用的提示:

  • 如何撤消上一个cd命令?

尽管存在一些命令行方式来更快地完成它,但我还是会建议使用名为nautilus-open-terminal的Nautilus扩展。

首先安装包nautilus-open-terminal并使用Nautilus为您喜爱的文件夹添加书签。 在Nautilus 3.6。*上,您必须进入齿轮菜单并选择为此位置添加书签

在此处输入图像描述

然后使用Nautilus书签在您喜欢的目录中更快,只需右键单击空白区域并选择在终端中打开

在此处输入图像描述

现在,您可以让命令行和文件管理器快速访问您喜欢的目录。

anc是专为该用例而设计的。

https://github.com/tobimensch/anc

以下是README.md的摘录:

 # make the current directory the default anchor: $ anc s # go to /etc, then /, then /usr/local and then back to the default anchor: $ cd /etc; cd ..; cd usr/local; anc # go back to /usr/local : $ anc b # add another anchor: $ anc a $HOME/test # view the list of anchors (the default one has the asterisk): $ anc l (0) /path/to/first/anchor * (1) /home/usr/test # jump to the anchor we just added: # by using its anchor number $ anc 1 # or by jumping to the last anchor in the list $ anc -1 # add multiple anchors: $ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first # use text matching to jump to $HOME/projects/first $ anc pro fir # use text matching to jump to $HOME/documents/first $ anc doc fir # add anchor and jump to it using an absolute path $ anc /etc # is the same as $ anc a /etc; anc -1 # add anchor and jump to it using a relative path $ anc ./X11 #note that "./" is required for relative paths # is the same as $ anc a X11; anc -1 # using wildcards you can add many anchors at once $ anc a $HOME/projects/* # use shell completion to see a list of matching anchors # and select the one you want to jump to directly $ anc pro[TAB] 

完全披露:我是anc的作者。

我为此创建了一组bash函数并将其添加到我的.bash_profile中

脚本

 goto(){ cd $(getFolders $1) } gf(){ getFolders $1 } getFolders (){ local folderList=( 'alias' 'Description of alias' '/path/to/alias/folder' 'alias2' 'Description of alias2' '/path/to/alias2/folder' ) local moved="0" local count=0 # Returns the path to the project while [ "${folderList[count]}" != "" ] do if [ "$1" == "${folderList[count]}" ]; then echo ${folderList[$(( $count + 2 ))]} moved="1" fi count=$(( $count + 3 )) done # Returns all project names if [ "$moved" != "1" ]; then count=0 while [ "${folderList[count]}" != "" ] do echoc 6 ${folderList[count]} echo - ${folderList[count+1]} count=$(( $count + 3 )) done fi } 

用法

getFolders

使用getFolders,您可以获得每个文件夹的简写,描述和位置列表。 当您使用带有简写的getFolders时,它将输出文件夹位置。 只需调用不带参数的getFolders,即可获得可用文件夹及其描述的列表

获取文件夹路径的示例

 getFolders alias 

输出

 /path/to/alias/folder 

获取可用文件夹的示例。

 getFolders 

输出

 alias - Description of alias alias2 - Description of alias2 

GF

gf是getFolders的快捷方式

 gf alias2 

输出

 /path/to/alias2/folder 

goto是一种cd到所选文件夹的简单方法。

 goto alias 

产量

cd已在/ path / to / alias /文件夹上运行

/路径/到/别名/文件夹>

为什么有多个function

Unix和Linux的核心是简单的可重用function,可以链接在一起。 我更喜欢这种方法,因为它不只是将您移动到选定位置,而是通过别名返回路径的函数。 您可以使用此函数执行从cd到该路径等任何操作。

您可以在.bashrc文件中放置一个别名(或者您最喜欢的shell的配置文件 – 它们通常位于您的主目录中):

 alias cd1="cd directory/directory/my_destination/" 

这里有关于在bash中使用别名的有用信息链接。

考虑在.bashrc或.bash_profile中设置CDPATH环境变量 。 CDPATH采用与其他PATH类似的变量采用相同的冒号分隔forms,并让cd在查找目录时采用快捷方式。 例如:

 $ mkdir -p /tmp/foo/bar/baz $ CDPATH='/tmp/foo/bar' $ cd baz /tmp/foo/bar/baz 

您可以设置自己的特定目录快捷方式。 例如,您希望转到嵌套目录, 通常是这样做

cd / home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target

你经常使用cd命令,然后输入所有目录名称,或者你可以跳过键入(使用TAB按钮),但它仍然需要你的几分钟。

因此, 为了节省您的时间,您可以在终端中创建它的别名 。 它的一次性任务是设置别名。

别名dir-target =’/ home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target’

现在,您必须使用别名( dir-target )移动到目标目录中。

我找到的最快捷的方式是xd ,一个名为Frank B. Brokken的荷兰人编写的“eXchange Directories”程序。

它通过查找文件系统上可以解析为您键入的缩写的所有路径来工作,例如,如果您的系统中存在这样的文件夹,则ulb可以代表/usr/local/bin

 % cx ulb Multiple Solutions: 1: /usr/lib/binfmt.d/ 2: /usr/local/bin/ 

按下2,你在/usr/local/bin

这是真正的旧软件,不​​再在原始位置提供,不与作者联系,所以为了防止它丢失,我把它放在Github回购中:

https://github.com/mrkafk/exchange_directories

我使用DirB(目录书签)来做到这一点。 非常好! http://www.linuxjournal.com/article/10585

我已经修改了我的口味以适应我的口味,但更容易使用和更清晰。