1

I work on a linux system with bash 4.x where I frequently find myself navigating different copies of very deep (and large) file directory structures. However, in reality I only need to access a handful of the directories for my day-to-day work.

I would love to have a way to navigate into the correct path without memorizing or typing out the destination completely. Is there a tool that would allow me to register relative bookmarks?

For example somewhere in the path prefix is the pattern

*/id_number/foo/

where foo is a unique indicator that I am inside one of several possible work directories specified by id_number. I would like to bookmark directories relative to foo and then type

cmd bar

where bar would auto expand into a list of bookmarks matching a pattern and maybe a tool for selecting which one to use. I am sure other user interfaces would suffice as well.

I would consider switching my shell to zsh or some alternative if this is necessary to obtain the necessary work flow.

Thanks,

SetJmp

  • Why not add links to those folders in your home directory? Type man ln in your shell to find out how. – Nifle Oct 16 '14 at 17:46
  • There are multiple replicas of id_number in the path. They come and go over time, and which one I am using varies from moment to moment. So instead, I propose starting with the assumption that my working directory is already underneath foo somewhere, and I can infer the rest of the info dynamically. – Setjmp Oct 16 '14 at 17:52
  • updatedb / locate? – Cyrus Oct 16 '14 at 20:17
1

The shell option 'cdable_vars' is probably what you need. Put the code below in your .bashrc file (or whatever option file happens to be sourced by your shell). Update the bookmarks of course.

# Allow cd to use variables as arguments
shopt -s cdable_vars
BOOKMARK1="./relative/path"
BOOKMARK2="/absolute/path"

When you are in the parent directory, use it as follows:

cd BOOKMARK1

If the bookmark is an absolute path, then it can be used anywhere.

|improve this answer|||||
0

I have built a set of shell functions that does exactly what I needed.

https://github.com/google/cwd_jmp

From the README

jmp.sh is a bash 4.x library that enables relative bookmarking of file system
directories including tab completion.
|improve this answer|||||
0

anc is designed to do stuff like this as well.

https://github.com/tobimensch/anc

Here's an excerpt from the 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]

Full disclosure: I'm the author of anc.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.