bd – Quickly Go Back to a Parent Directory Instead of Typing “cd ../../..” Redundantly

While navigating the file system via the command line on Linux systems, in order to move back into a parent directory (in a long path), we would normally issue the cd command repeatedly (cd ../../..) until we land into the directory of interest.

This can be so tedious and boring much of the time, especially for experienced Linux users or system administrators who carry out so many various tasks, therefore hope to discover shortcuts to ease their jobs while operating a system.

Suggested Read: Autojump – An Advanced ‘cd’ Command to Quickly Navigate Linux Filesystem

In this article, we will review a simple but helpful utility for quickly moving back into a parent directory in Linux with the help of bd tool.

bd is a handy utility for navigating the filesystem, it enables you to quickly go back to a parent directory without typing cd ../../.. repeatedly. You can reliably combine it with other Linux commands to perform a few daily operations.

How to Install bd in Linux Systems

Run the following commands to download and install bd under /usr/bin/ using the wget command, make it executable and create the required alias in your ~/.bashrc file:

$ wget --no-check-certificate -O /usr/bin/bd https://raw.github.com/vigneshwaranr/bd/master/bd
$ chmod +rx /usr/bin/bd
$ echo 'alias bd=". bd -si" >> ~/.bashrc
$ source ~/.bashrc

Note: To enable case-sensitive directory name matching, set the -s flag instead of -si in the alias created above.

To enable autocomplete support, run these commands:

$ sudo wget -O /etc/bash_completion.d/bd https://raw.github.com/vigneshwaranr/bd/master/bash_completion.d/bd
$ sudo source /etc/bash_completion.d/bd

How to Use bd in Linux Systems

Assuming your currently in the top directory in this path:

/media/aaronkilik/Data/Computer Science/Documents/Books/LEARN/Linux/Books/server $ 

and you want to go to Documents directory quickly, then simply type:

$ bd Documents

Then to go straight into the Data directory, you can type:

$ bd Data
Switch Between Directories Quickly
Switch Between Directories Quickly

Actually, bd makes it even more straight forward, all you need to do is just type bd <few starting letters> such as:

$ bd Doc
$ bd Da
Quickly Switch Directories
Quickly Switch Directories

Important: In case there are more than one directories with the same name up in the hierarchy, bd will move you into the closest without considering the immediate parent as explained in the example below.

For instance, in the path above, there are two directories with the same name Books, if you want to move into:

/media/aaronkilik/Data/ComputerScience/Documents/Books/LEARN/Linux/Books

Typing bd books will take you into:

/media/aaronkilik/Data/ComputerScience/Documents/Books
Move to 'Books' Directory Quickly
Move to ‘Books’ Directory Quickly

Additionally, using bd within backticks in the form `bd <letter(s)>` prints out the path minus changing the current directory, so you can use `bd <letter(s)>` with other common Linux commands such as ls, echo etc..

In the example below, am currently in the directory, /var/www/html/internship/assets/filetree and to print the absolute path, long-list the contents and sum up the size of all files in the directory html without moving into it, I can just type:

$ echo `bd ht`
$ ls -l `bd ht`
$ du -cs `bd ht`
Switch Directory with Listing
Switch Directory with Listing

Find out more about bd tool on Github: https://github.com/vigneshwaranr/bd

That’s all! In this article, we showed reviewed a handy way of quickly navigating the filesystem in Linux using bd utility.

Have your say via the feedback form below. Plus, do you know of any similar utilities out there, let us know in the comments as well.

Tutorial Feedback...
Was this article helpful? If you don't find this article helpful or found some outdated info, issue or a typo, do post your valuable feedback or suggestions in the comments to help improve this article...

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

26 thoughts on “bd – Quickly Go Back to a Parent Directory Instead of Typing “cd ../../..” Redundantly”

  1. I’ve written a bash function in 5 minutes that does the same, why to install a tool for such trivial things?!

    function bd {
        cd $(pwd | grep -ioP ".*$*.*?/")
    }
    
    Reply
  2. if [ -n "$PS1" ]; then
    
        cd ()
        {
            while [[ "$*" =~ (^|/|\s)[.]{3,}($|/|/s).*$ ]]; do
                set -- "${@//.../..\/..}";
            done;
            builtin pushd "[email protected]" > /dev/null && /bin/ls --almost-all --color=auto
        }
    fi
    
    # cd ... 
    # cd .... 
    # cd .....
    
    Reply
    • Just made a shell function that should do the same as the presented tool. I think that my solution is prettier than yours. What do you think about this approach?

      function bd {
          cd $(pwd | grep -ioP ".*$*.*?/")
      }
      
      Reply
      • I think our objective is very different, my function only intents to expand dots. The main challenge was to create it with one loop statement (I probably have to give that up), next was to only use builtins, external commands can be very resource demanding especially in a loop and adds unnecessary dependencies.

        second version… (https://pastebin.com/gCquQjQk)

        Reply
        • Ok, but instead of looping I just once call grep on the current path. I would think it’s more efficient than looping, but I’m not sure …

          Reply
          • # time cd ...
            real    0m0,005s
            user    0m0,001s
            sys     0m0,005s
            
            # cd /usr/local/bin/.../bin/.../bin (multiple expansion)
            real    0m0,006s
            user    0m0,002s
            sys     0m0,004s
            
            # time bd usr
            real    0m0,012s
            user    0m0,003s
            sys     0m0,011s
            
    • Hi Jesse! I’m the author. Long time back, Github had issues with their certificate so I had to change the instructions to ignore it so wget would be able to download the file.

      You can also just copying the contents file and write to /usr/local/bin/bd using an editor like vim. :)

      Reply
  3. No Do *not* install user files in /usr/bin! This is terrible advice. Put it in /usr/local/bin (that’s what it’s there for), or add a user dir like ~/.local/bin to your $PATH.

    Reply
  4. A simpler version of this, which just steps up one level in the directory tree is:

    alias ..='cd ..;ls'
    

    This creates a command “..” which goes back one directory and does an “ls”. I use it all the time.

    Reply
  5. Please don’t suggest using wget –no-check-certificate, that should only be for internal/local use where you can be confident of no MITM attacks.

    Also, when not using your Linux package manager to install a program, you should not be using /usr/bin. For a single user you can install to a folder in your home directory like ~/bin (and add that to your $PATH). Or to make it available to all users of a system you can use /usr/local/bin.

    Never download files as root. Instead of using `sudo wget` you should use wget as a normal user, check the contents of the file and then use sudo to install it to the desired location (here /etc/bash_completion.d/bd).

    Also, there’s no need to use `sudo source` and I’m not sure it would even work. Instead just use `source` as the current user.

    You have responsibilities as a technical writer to give good examples without creating potential security issues for your readers. Please think carefully about commands given in examples.

    Reply
    • @Bill

      Yes, it is always good to share with you guys and receive useful feedback like this. We will consider all you have stressed out here. Many thanks for the heads up.

      Reply
      • Yes, ‘sudo source‘ does not work. Also, you show wget being used to writing the file into /usr/bin/. This needs a sudo (but like Bill says, it shouldn’t be in /usr/bin/ and should be d/led and checked first). Also, looking at the github for bd, it seems it can be installed via a package manager now: https://github.com/vigneshwaranr/bd/issues/32

        Otherwise, thanks for posting this article. `bd` will prove very valuable to me. Thanks!

        Reply
  6. This command is really cool! I am going to install it right away. This is an excellent opportunity to remind the colleagues out there about a related set of commands: “pushd” and “popd“.

    Thanks and keep up the good work!

    Reply

Got something to say? Join the discussion.

Have a question or suggestion? Please leave a comment to start the discussion. Please keep in mind that all comments are moderated and your email address will NOT be published.