我在装有 bash 4.x 的 Linux 系统上工作,经常发现自己需要浏览非常深(且很大)的文件目录结构的不同副本。但实际上,我只需要访问少数几个目录来完成日常工作。
我希望有一种方法可以导航到正确的路径,而无需完全记住或输入目的地。有没有一种工具可以让我注册相对书签?
例如,路径前缀中的某处是模式
*/id_number/foo/
其中 foo 是唯一的指示符,表示我位于 id_number 指定的几个可能的工作目录之一内。我想将与 foo 相关的目录加入书签,然后输入
命令栏
其中 bar 会自动扩展为与模式匹配的书签列表,并且可能还会提供选择使用哪个书签的工具。我相信其他用户界面也足够了。
如果有必要获得必要的工作流程,我会考虑将我的 shell 切换到 zsh 或某些替代版本。
谢谢,
设置跳转
答案1
shell 选项“cdable_vars”可能正是您所需要的。将下面的代码放入您的 .bashrc 文件中(或您的 shell 恰好提供的任何选项文件)。当然,更新书签。
# Allow cd to use variables as arguments
shopt -s cdable_vars
BOOKMARK1="./relative/path"
BOOKMARK2="/absolute/path"
当在父目录时,使用方式如下:
cd BOOKMARK1
如果书签是绝对路径,那么它可以在任何地方使用。
答案2
我已经构建了一组 shell 函数,可以满足我的需要。
https://github.com/google/cwd_jmp
来自 README
jmp.sh is a bash 4.x library that enables relative bookmarking of file system directories including tab completion.
答案3
anc 也被设计用来做这样的事情。
https://github.com/tobimensch/anc
以下是 README 的摘录:
# 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 的作者。