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


12

在Ubuntu终端中,我发现自己每次计算机启动时都花​​费大量时间切换到特定目录。有什么办法可以使此过程变得更容易?我可以使用一些热键或快速目录更改吗(例如电话上的快速拨号)?

 eg:
    cd 1:Changes to saved directory one

自问这个问题已有四年了,直到今天没有人提到CDPATH。:(
kojiro

我想这可能取决于您的控制台,但是在Kubuntu终端中有一个“书签”菜单,在这里我可以将目录添加为书签并以这种方式跳转到它!
像素

Answers:


12

有两种选择:

  1. 如果您想每次打开bash终端时都位于特定目录中,请编辑~/.bashrc文件并仅添加该行cd Directory,例如cd ~/Desktop

  2. 如果你想有几个快捷方式,你可以随时使用全局变量,你可以在你的设置~/.bashrc文件,如下所示export a=/tmp,然后你就可以做到cd $a这将使你/tmp

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


3
为避免重启终端,您可以使用source ~/.bashrc或更短的. ~/.bashrc
Gerhard Burger

18

还要看看autojump,它会建立一个具有先前访问目录的数据库,然后您可以跳转到该数据库。例如,你有

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

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

j workstuff

甚至

j stuff

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

但是它会变得更好!如果您还有目录

/home/user/stuff

你也是

j stuff 

然后TabTabTab您得到(按访问量最大的顺序)

$ 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安装它的说明,该指南可为您提供最新版本)


1
终端中的crtl + r还会在先前的命令中查找“部分匹配项”。真的很方便。
2012年

6

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

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

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

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

也可以看看:


4

尽管也有一些很好的答案了,我想我会提的完整性老pushdpopdBash的内建有让你在你的文件系统路径深层目录间快速移动。与burger.gaautojump提到的书签相反,使用创建的目录堆栈只是临时的。pushd

作为GNU 手动注释pushd并且popd被击建宏用于构造是一个临时目录堆

最近访问的目录列表。推送的内置命令会在更改当前目录时将目录添加到堆栈中,而popd内置命令会从堆栈中删除指定的目录并将当前目录更改为已删除的目录。内置的dirs显示目录堆栈的内容。

这需要一点时间来适应,但是例如在此博客此站点上有很多有用的教程。这些命令没有单独的手册页,因为它们包含在Bash手册页中,但是要快速参考,您可以查看GNU Bash页。

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

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

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

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

然后您可以将更多目录添加到堆栈中,因此您将看到以下目录,其中包括3个指定文件夹和您的~主文件夹:

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$

您可以继续执行此操作而无需将其从堆栈中删除,尽管您cd要访问的任何文件夹(使用添加到目录堆栈的文件夹除外)pushd都会更改您的目录堆栈。

一旦按照所需顺序排列了目录堆栈,就可以使用popd来快速循环浏览目录,然后返回到主文件夹。例如,从Pictures我们可以返回Downloads

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

然后提示显示

~/Downloads/folder/interest$

通常,这样做的好处是,您可以使用以下命令设置目录堆栈及其中的项的顺序,pushd然后说您要在每个目录中编辑三个文件,可以popd在删除它们的同时立即返回到每个目录从目录堆栈。然后,您的最后一个popd将返回~。当您拥有特别深的目录并可以使用它来设置目录堆栈以在它们之间快速移动时,它特别有用。

此外,此问题包含一些在命令行上工作时可能会有用的提示:


2

即使有一些命令行方法可以更快地完成此操作,但我还是会亲自使用Nautilus扩展名来重新命令nautilus-open-terminal

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

在此处输入图片说明

然后使用Nautilus书签在您喜欢的目录中更快,然后右键单击空白处,然后选择“ 在终端中打开”

在此处输入图片说明

现在,您可以同时通过命令行和文件管理器快速访问自己喜欢的目录。


原始海报试图在终端上工作,并且通常可以更快地在终端上工作。
haziz 2012年

1
@haziz:是的,但是AskUbuntu的问题和答案不仅对OP有用,而且特别适合所有在网上找到它的人。这对我来说是一个宝贵的答案。
哈维尔·里维拉

2

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的作者。


1

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

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

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


1

我为此创建了一组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 / folder上运行

/ path / to / alias / folder>

为什么要具有多种功能

从本质上讲,Unix和Linux具有可链接在一起的简单可重用功能。我更喜欢这种方法,因为它不仅可以将您移动到选定的位置,而且可以通过别名返回路径。您可以使用此功能执行从cd到该路径的任何操作。


0

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

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

0

您可以设置自己的指向特定目录的快捷方式。例如,您想转到嵌套目录,通常

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)进入目标目录。


0

我发现最快的方法是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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.