/Project/Warnest/docs/
和~/Dropbox/Projects/ds/test/
。但是我不想一直输入
cd /[full-path]/
。 我可以想到的一种解决方案是将环境变量添加到我的
bash
.profile
中,将常用目录添加到cd
中,并使用这些变量添加到它们中。 /> 但是还有其他解决方案吗?
#1 楼
如果仅在两个目录之间切换,则可以使用cd -
来回切换。评论
这么长的时间使我难以捉摸的是一个谜。非常感谢您提供的出色提示。
– Shickadance先生
2012年2月9日15:21
+1当然是我的最爱之一,而有些专家以某种方式“错过了”。
–迈克尔·杜兰特(Michael Durrant)
2012年4月24日在2:17
#2 楼
在CDPATH
和bash
中有一个外壳变量ksh
和cdpath
中有一个zsh
:CDPATH The search path for the cd command. This is a colon-separated
list of directories in which the shell looks for destination
directories specified by the cd command.
因此可以在〜/ .bashrc中进行设置:
export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds
然后
cd docs
和cd test
将带您到第一个找到的此类目录。 (我的意思是,即使当前目录中存在相同名称的目录,仍会查询CDPATH
。如果CDPATH
将包含更多具有给定名称的子目录的目录,则将使用第一个。)评论
应该提到的是,通常,您希望$ CDPATH中的第一个条目为。 (显式条目,即:也可以)。否则,您将得到奇怪的行为,其中CDPATH目录优先于当前工作目录中的目录,而您可能不希望这样做。
– jw013
2012年2月8日在23:40
我几乎做同样的事情,但是没有输出。这样,CDPATH不会导出到具有潜在奇怪或有害影响的脚本。有关更多讨论和示例,请参见此处。
– Telemachus
2012-02-17 12:47
“ zsh中的bash,ksh和cdpath”……以及tcsh(仅在超级用户上基于该问题回答一个问题,并在SE上寻找类似答案时发现了这个问题)。
–亨尼斯
13年11月13日在7:36
我认为这是POSIX指定的。至少,用于CD的POSIX引用了它。
–mikeserv
2014年8月30日17:47
#3 楼
您可能尝试的其他方法是称为自动跳转的工具。它保留对其别名(默认为j
)的调用的数据库,并尝试对要去的地方做出明智的决定。例如,如果您经常键入:j ~/Pictures
您可以使用以下命令在紧急情况下到达此处:
j Pic
它在Debian和Ubuntu中可用,默认情况下按用户包括在
~/.bashrc
或~/.zshrc
中。评论
Autojump可能是最好的工具,建立普通目录数据库需要花费一些时间,但是一旦实现,我想您会发现没有它就无法生存。我知道每次我在别人的计算机上时都会感到残废。
–quodlibetor
2012年2月13日在18:29
谢谢喜欢这个工具!尽管cd-可以方便地知道您是否还不知道它,但我认为这是比当前最佳答案更好的解决方案。
–用户
2014年10月13日在4:49
全系统安装在什么系统上?
–ctrl-alt-delor
17年1月17日在16:13
@richard它可以作为软件包(例如Ubuntu中的apt-get install autojump,也可以用于其页面上记录的许多其他软件包)用于系统范围的安装,但是每个用户都需要将其加载到其shell环境中,以便可以覆盖cd跟踪您要去的地方
–nealmcb
17年4月6日在17:56
重要的一点是应该将源/usr/share/autojump/autojump.sh添加到〜/ .bashrc中,以使自动跳转正常工作。
– Pablo A
17年7月10日在2:10
#4 楼
如果目录数量较少,则可以使用pushd
在它们之间进行旋转:# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test
与
cd -
不同,您可以将其用于两个以上的目录按照Noach的建议,我现在使用的是:
function pd()
{
if [[ $# -ge 1 ]];
then
choice=""
else
dirs -v
echo -n "? "
read choice
fi
if [[ -n $choice ]];
then
declare -i cnum="$choice"
if [[ $cnum != $choice ]];
then #choice is not numeric
choice=$(dirs -v | grep $choice | tail -1 | awk '{print }')
cnum="$choice"
if [[ -z $choice || $cnum != $choice ]];
then
echo "$choice not found"
return
fi
fi
choice="+$choice"
fi
pushd $choice
}
示例用法:
# same as pushd +1
$ pd 1
# show a prompt, choose by number
$ pd
0 ~/Dropbox/Projects/ds/test
1 /Project/Warnest/docs
2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs
# or choose by substring match
$ pd
0 /tmp
1 ~/Dropbox/Projects/ds/test
2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test
# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp
等显然,这仅用于在堆栈中旋转,并且不处理添加新路径-也许我应该重命名。
评论
哦,我知道要进行遍历的推动和弹出操作,但不是那样推动就可以旋转到目前为止使用的内容...
–伊兹卡塔
2012年2月8日在20:29
#5 楼
我在bashrc中使用alias
来制作这些CD。例如:
alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'
评论
是bashrc是.profile之类的文件吗?我需要在其中添加这些行?
–saiy2k
2012年2月8日在7:43
〜/ .bashrc或/etc/bash.bashrc。我以前没有使用过.profile,所以不知道它们之间的关系:-(
–费利克斯·严(Felix Yan)
2012年2月8日在7:45
脚本bashrc将在您每次打开终端时启动。配置文件启动。
–user14517
2012年2月8日在10:42
将这些行添加到我的.bash_profile中,效果很好.. thx :)
–saiy2k
2012年2月8日在10:56
我建议将别名放在〜/ .bash_aliases中以进行维护。它要求您的.bashrc知道此文件,如果添加[-f〜/ .bash_aliases];然后 。 〜/ .bash_aliases您的.bashrc中的fi(可能已经存在)
– Sumak
20年8月25日在10:01
#6 楼
使用“ pushd -n”(假设您使用bash)。添加到您的〜/ .bashrc中:
pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/
然后,
/>
cd ~
是您的家,cd ~1
是~/Dropbox/Projects/ds/test/
cd ~2
是/Project/Warnest/docs/
您可以完全使用
~1
,~2
等与~
相同。#7 楼
我找到了一个脚本(通常称为acd_funch.sh)为我解决了此问题。这样,您可以键入cd --
来查看已使用的最后10个目录。它看起来像这样:0 ~/Documents/onedir
1 ~/Music/anotherdir
2 ~/Music/thirddir
3 ~/etc/etc
要进入
~/Music/thirddir
,只需键入cd -2
参考文献
< br scripts / acd_func.sh
SkyRocknRoll / acd_func.sh
注意:该脚本最初发布在linux gazette上,该文章可在此处找到:acd_func.sh-扩展了bash的CD保留,显示和访问已访问目录名称的历史记录。
评论
2004年12月,在Linux公报第109期中也发布了相同的脚本。
– Serge Stroobandt
13年6月20日在21:12
@Dean链接转到音乐视频,并显示Geocities已关闭。
–某事
2014年8月30日15:05
@somethingSomething添加了备用链接。
–院长
2014年8月30日在17:42
历史| grep光盘
–user2180794
19年2月12日在12:41
#8 楼
尝试使用bash中的cdable_vars
shell选项。您使用shopt -s cdable_vars
将其打开。 然后您需要设置变量
export dir1=/some/path
。最后是cd dir1
等。然后可以将其放入
~/.bashrc
中使其粘住。#9 楼
这里有很多好的建议。使用哪个选项取决于您是否在目录中切换了固定目录,还是在寻找更通用的解决方案。如果目录较小,则设置简单的别名(如Felix Yan所建议)将最容易使用。
如果您正在寻找更通用的解决方案(例如,许多不同的目录,会随着时间的推移而变化),那么我会使用push和popd(因为Useless)建议)。我个人觉得默认的push / popd很难使用,尤其是当您开始在许多文件夹之间切换时;但是我写了一些调整,使它变得更容易。将以下内容添加到您的bashrc中:
alias dirs='dirs -v'
pd ()
{
if [ -n "" ]; then
pushd "${1/#[0-9]*/+}";
else
pushd;
fi > /dev/null
}
使用
pd
(作为pushd
的缩写)来跳转到新文件夹,记住您所在的位置。 使用
dirs
查看已保存目录的列表。使用
pd 3
跳至目录编号3。示例用法:
$ PS1='\w$ ' ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
0 /etc/defaults
1 /tmp
2 ~/Dropbox/Public
3 ~/Documents/spec
4 ~/Documents/data
5 ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
0 ~/Dropbox/Public
1 ~/Documents/spec
2 ~/Documents/data
3 ~
4 /etc/defaults
5 /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
0 /etc/defaults
1 /tmp
2 ~/Dropbox/Public
3 ~/Documents/spec
4 ~/Documents/data
5 ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$
#10 楼
以下内容似乎适用于我测试过的一种情况,您可以在〜/ Bookmarks中将目录名称作为符号链接删除:mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"
function ccd() { cd $(readlink "$HOME/Bookmarks/") ; }
ccd testdir && echo $PWD
# gives /tmp
评论
ccd()函数是否需要在终端提示符或其他地方键入?您能解释一下吗?
–saiy2k
2012年2月8日在8:41
@ saiy2k:对不起,是的。该功能行进入您的.bashrc(您可以在终端中键入以进行测试,但是当您关闭该窗口时该行将消失),设置“ testdir”测试用例之前的行成为/ tmp的名称。 ,最后一行是测试是否有效。
–乌尔里希·施瓦茨(Ulrich Schwarz)
2012年2月8日在17:19
#11 楼
您可能会比尝试j2做得更糟。在自述文件中:
花很多时间在复杂的目录树上cd-ing?
j跟踪您的位置您去过那里以及花了多少时间,并提供了一种方便的方法来跳转到您实际使用的目录。
我广泛使用并推荐它。
#12 楼
我建议使用zsh,该外壳对于大多数cli程序的目录,文件甚至选项都是非常好的TAB完成。我已经使用该外壳多年了,错过了它的功能。
编写zsh脚本也很有趣,因为有大量的单行代码可以每天为您提供帮助。
评论
由于bash具有相同的功能,因此无需更改为zsh即可完成TAB。对于其他功能,也许但并非如此。
– Peer Stritzinger
2012年2月9日在11:14
@PeerStritzinger Bash在BASH 4.0中引入了这种功能,但是与zsh相比,它仍然远远落后。说“都一样”肯定是不正确的。
–polemon
2012-2-22在0:02
好吧,zsh无疑是übershell,但只需完成制表符就无需更改(询问bash的问题)。此外bash 4.0是大约3年前推出的...
– Peer Stritzinger
2012-02-22 9:45
#13 楼
以我的经验,在shell中导航的最大加速就是使用其历史搜索功能。在Bash中,您可以通过按Ctrl
+ R
并输入某种模式来向后搜索命令历史。然后,将该模式与历史记录中的先前条目进行匹配-可能是cd
命令或其他操作-并在您键入时提出建议。只需按Enter键即可再次运行建议的命令。这在Bash中称为reverse-search-history
,我喜欢它。这为我节省了许多按键操作,并节省了内部内存。这是一件好事,因为您只需要记住命令的一小部分,例如
Drop
或Wa
即可区分两个历史记录条目cd ~/Dropbox/Projects/ds/test/
和cd /Project/Warnest/docs/
。#14 楼
我还使用了这些别名(将它们添加到〜/ .bashrc中):alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
与它们一起进入上一级目录要快得多(但它只能解决一半导航)。
评论
这些是有用的别名,但我不能完全确定它们是否可以满足OP的需求。您可能会考虑扩大答案,以建议这些答案如何直接对OP的问题有所帮助。
– HalosGhost
2014年7月11日在18:36
#15 楼
如果您使用的是zsh:则不必键入
cd
,只需键入目录路径(/foo/bar/baz<Enter>
等于cd /foo/bar/baz<Enter>
)需要设置
auto_cd
选项您可以使用
Tab
键扩展缩写路径(/u/sh/pi<Tab>
扩展为/usr/share/pixmaps
;也适用于文件名)评论
Bash 4已获得shopt -s autocd,因此它不再是仅zsh的优点。
–吉尔斯'所以-不再是邪恶的'
2012年2月8日在23:44
#16 楼
有一个相当不错的工具可以快速更改目录:xd-超快速目录更改器
http://xd-home.sourceforge.net/xdman.html
有点尴尬的是,您需要将其映射到bash配置文件或类似文件中,因为它仅输出目录
# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f()
{
cd `/usr/bin/xd -g $*`
}
您可以执行以下操作:
# change to /var/log/a* (gives you a list to choose from)
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach
评论
将函数更改为f(){cd“ $(xd -g” $ @“)”;正确处理xd的参数中的空格目录和空格(您可能不需要路径)。如果您从未以其他方式使用xd,则可以选择执行xd(){cd“ $(command xd -g” $ @“)”; }(或者,使用/ usr / bin / xd代替命令xd –始终可以运行命令xd…,如果需要绕过它)。
–亚当·卡兹(Adam Katz)
19年6月5日在15:17
#17 楼
无论如何,您永远都不应在shell中键入完整路径。您始终可以使用:soffice /P*/W*/*/mydoc*
代替
soffice /Project/Warnest/docs/mydoc.odt
评论
这就像制表符补全,但在各个方面都更糟
– Michael Mrozek
16年5月14日在18:41
除非Project是仅以P开头的文件,否则您不能使用带有同等数量的按键完成的制表符来完成此操作。此外,每次都必须等待完成,使用*无需等待。
– Gena2x
16年11月23日在12:08
我认为您会倒退-除非Project是唯一以P开头的文件,否则您将无法执行P *。制表符补全可以循环(默认情况下,在大多数Shell中;您需要在bash中将制表符重新绑定为菜单完成),并且在像这样的简单情况下立即解决,无需等待
– Michael Mrozek
16年11月23日在15:47
关于“您无法做到”-您可以尝试一下,如果您认为自己做不到,那您将失去全部要点。尝试echo / u * / b * / g ++
– Gena2x
16年11月23日在17:26
我理解您的意思,只要您确定键入的路径明确,它就会更快,但是/ P * / W * / * / mydoc *之类的东西听起来似乎可以正常工作,直到有一天您碰巧另一个与该glob匹配的文件,突然之间您一次打开了这两个文件。 / u * / * / g ++很少有字符,但是希望在我的以u开头的任何根文件夹的任何子文件夹中,没有别的名称是g ++。 (作为一个不错的折衷,在某些shell中,您可以使用tab随地扩展glob)
– Michael Mrozek
16-11-23在17:42
#18 楼
还有一个OLDPWD
环境变量,根据IEEE 1003.1(POSIX),每次cd
更改工作目录时,环境变量应使用先前的工作目录进行更新(对于奇怪的环境变量,请参见IEEE 1003.1-2008第2506页的80244行)。 #19 楼
还有一个专门为此创建的“ wcd”应用程序(也已经移植到cygwin上,因为我在使用它)。您可以使用它创建快捷方式,目录书签。还支持通配符。阅读/ usr / share / wcd中的手册页和文档应该会很有帮助。http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html
#20 楼
cdargs是用于标记目录的最有效工具:http://www.youtube.com/watch?v=uWB2FIQlzZg评论
这是您关联的产品吗?
–卡扎尔克
13年2月27日在19:21
感谢您将我指向cdargs。只需在ubuntu上sudo apt-get cdargs即可。顺便说一句,youtube视频确实很糟糕,但是该工具很棒。
– DavidG
2014年7月21日16:00
#21 楼
我有同样的问题,首先找到了这个答案。我安装了实用程序z(https://github.com/rupa/z)。这正是您要寻找的,因为z从您的cd命令中学习,并根据频率原理(频率和最近)跟踪目录。因此,在一次执行完两个cd命令之后,您可以执行以下操作:
z docs
z ds
分别跳转到
/Project/Warnest/docs/
和~/Dropbox/Projects/ds/test/
。 z的参数是正则表达式,因此您甚至不需要键入完整的文件夹名称。 #22 楼
更新(2016):我现在使用FASD进行此操作,它允许基于您的最新目录进行模糊搜索。我已经在Ruby中为此创建了一个工具。它允许您使用YAML文件来声明您的项目。
我在这里写了一篇关于它的小文章:
http://jrnv.nl/switching-projects-terminal-quickly /
我也在GitHub上发布了源代码:
https://github.com/jeroenvisser101/project-switcher
#23 楼
尝试https://pypi.org/project/fastcd/它设置了钩子,用于记录bash中访问过的目录。并将脚本设置为“ j”别名,该脚本向您显示上次访问的目录,并具有快速cd(开始键入以过滤目录)的功能。
评论
这是如何运作的?如果是别名,此工具对您有什么作用,您无法通过手动编辑.bashrc来做什么?
– G-Man说“恢复莫妮卡”
2014年11月3日22:55
它启动守护程序,该守护程序在〜/ .fastcd中记录已启动的shell(bash)的访问目录。 “ j”启动工具,该工具向您显示上次访问的目录,并具有快速cd的功能。需要对.bashrc进行修改才能使用“ j”别名。我想您可以查看源代码以获取更多信息。
– Sam Toliman
2014年11月3日23:36
谢谢你快速的回复。这就是答案中应该包含的信息。请修改您的答案以包含此信息。
– G-Man说“恢复莫妮卡”
2014年11月4日15:21
#24 楼
TL; DR将
Fish
用于交互式外壳,可立即为您提供功能(fish
> zsh
> bash
)。 使用
POSIX
/ Bash
进行脚本编写,这是最广泛支持的语法(POSIX
> Bash
> Zsh
> Fish
)。Shells
这里测试了不同的Shell我的反馈(按照测试/采用的顺序):
Bash
:自动完成:基本;
路径扩展:否;
脚本编制:出色。
Zsh
+ oh-my-zsh
:自动完成:好(循环通过);
路径扩展:是(
cd /e/x1
→cd /etc/X11/
); 脚本编写:好。
Fish
+ oh-my-fish
(当前)是最好的开箱即用:自动完成:本机和受支持的选项;
路径扩展:是;
脚本编写:与POSIX-的差异太大兼容。
使用有意义的别名
每个外壳都可以使用
function
和alias
进行扩展,这是我使用的与您的问题有关的(兼容POSIX):back () { # go to previous visited directory
cd - || exit
}
up () { # go to parent directory
cd ..|| exit
}
有一些基本但很有意义的内容,因此易于记住和自动完成。
了解您的shell
配置
CDPATH
以添加最常用的目录(例如~/projects/
,/etc/init.d/
),因此您可以快速跳转到它们。 有关
CDPATH
上mroe的详细信息,请参阅manatwork答案。我的自定义内容位于github:posix(bash / zsh),fish(接受PR);
可能有用的各种实用程序:tree,k(zsh的目录列表)
进入点为您的Shell查找插件:
bucaran / awesome-fish,
unixorn / awesome-zsh-plugins,
alebcay / awesome-shell
bashFAQ;
鱼类文档;
对于外壳之间的差异,我建议进行出色的hyperpolyglot.org/unix-shells比较。
在其IRC上:#bash,#zsh,#ohmyzsh,#fish等。我需要耐心等待年轻的帕达万)。
评论
当shell函数调用exit时,您退出交互式shell。那些“有意义的别名”可以只是别名back ='cd-'和别名up ='cd ..'-但请放心,这些命令将永远不会返回false(没有先前的目录?它将您发送回首页! (这是无操作!),因此您将永远不会退出。还要考虑别名back ='cd $ OLDPWD'(注意单引号),因为它没有任何输出(cd-告诉您它向您发送的位置,这可能是不必要的,因为您的提示中包含该信息)
–亚当·卡兹(Adam Katz)
19年3月7日在16:03
#25 楼
多年来,我一直在使用自己的实用程序cdhist来管理它。它是cd命令的别名,并自动保留目录堆栈。#26 楼
您可以使用export
将目录路径分配给变量,然后引用它们。export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2
评论
是的,这足以满足一些最喜欢的顾客。无需安装任何其他实用程序。只需将export语句放在〜/ .bashrc中,它们将始终可用。
– Wisbucky
18年5月21日在21:44
#27 楼
这里有一些建议:最直接的主意,我将在.profile文件中添加别名
vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'
然后使用
$ dir1
或dir2
,如果您始终只切换两个目录,则可以cd 。使用
cd -
将在它们之间切换。#28 楼
我用于这种情况的解决方案是screen
。开始屏幕,并使用C-a c
为每个目录创建一个窗口,然后浏览至该目录。使用C-a n
或C-a p
在Windows /目录之间切换。用C-a A
命名窗口。然后,您可以使用C-a "
弹出窗口列表,并使用窗口编号或窗口名称导航。由于它是screen
,因此您可以从会话中分离出来,以节省您的工作空间,并稍后使用相同的设置重新连接。#29 楼
看来您基本上需要的是工作流程的项目文件。使用属于您的活动的目录,例如在编程IDE中。尝试使用Zsh导航工具和那里的工具n-cd
。它将允许您在上次访问的文件夹中导航,还可以定义带有所选目录的Hotlist
:n-cd
可以与以下按键组合:zle -N znt-cd-widget
bindkey“ ^ T” znt-cd-widget
#30 楼
anc
是cmd线工具(锚点的缩写),用于保留目录的书签。 (到目前为止,仅使用bash进行了测试)在您的情况下:
anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/
这会将两个目录都添加到锚(认为书签)列表中
现在,是否要从系统上的任何地方跳转到
/Project/Warnest/docs/
:
anc Warn
,如果要跳转到
~/Dropbox/Projects/ds/test/
类型:anc ds test
除了将文本与书签路径匹配之外,anc还具有许多其他方便的方法来跳转目录。
anc i
启动交互模式,该模式按数字列出所有书签,
因此您只需要输入数字
如果输入:
anc Pro[TAB]
显示与所有书签(在您的情况下为两个书签)匹配的列表,您可以使用箭头键从中进行选择,这是一种非常快速而直观的方法。 />
在项目的github页面上获取anc:
https://github.com/tobimensch/anc
还有一个自述文件,其中包含示例用法。
完整披露:我是该脚本的作者。我希望有人会觉得有用。
评论
符号链接也可能对此有用。 en.wikipedia.org/wiki/…