I often find myself doing commands like this

cd ../../../../../ 

Is there a shortcut I can use that will cd ../ n times?

7

9 Answers

No, there is no existing command for this, but it is trivial to write one. Add these lines to your ~/.bashrc file (thanks to D. Ben Knoble for pointing out that the variable should be local):

function ncd(){ local path="" for ((i=1;i<=$1;i++)); do path="../$path" done echo "Moving to $path" >&2 cd "$path" } 

Save the file, open a new terminal, and you can now move N directories up using ncd N. For example:

$ pwd /home/terdon/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9 $ ncd 5 Moving to ../../../../../ $ pwd /home/terdon/dir1/dir2/dir3/dir4 $ ncd 2 Moving to ../../ $ pwd /home/terdon/dir1/dir2 

Coming from the Windows world, Alt + Up Arrow navigates to the parent directory in Windows Explorer. So I made something like this in ~/.inputrc:

"\33\33[A": "cd ..\n" 

then pressing Alt + Up Arrow moves to the parent directory in the terminal. You have to press multiple times of course to move higher, but I have found it to be very fast. Also you can change the shortcut to your liking.

2

You can easily create aliases or shell functions to perform the given task. I personally use these:

alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' 

and so on, manually defined for up to many-many dots in my .bashrc.

A shell function could instead easily take a numeric parameter, and execute cd .. in a loop that many times.

Similar to @terdon's answer, with slightly more natural usage and output:

# go up up() { local count="${1:-1}" local path=../ while (( --count > 0 )) ; do path="$path"../ done echo "cd -- $path" cd -- "$path" } 

This defines a function up, which has the following properties:

  • up n will go up n directories
  • up will go up exactly one directory (i.e., the default for n is 1)
  • output mimics that when using shopt -s autocd (hence the --, which are technically unnecessary)
  • as before, OLDPWD is set correctly to the current value of PWD, rather than one of the intermediate directories. This means that up 5; cd - works as expected.
6

Using the printf hack:

function updir(){ cd $(printf '../%.0s' {1..$1}) } 

E.G. updir 5 will move you up 5 directories.

1

Another possibility to consider is physically sending the keys if you have xdotool:

xdotool type ../ 

Assign it to a keyboard hotkey through Keyboard -> Shortcuts dialog. Then you can press the hotkey a required number of times.

If you use zsh you can use repeat:

repeat 5 { cd ..} 
1

In Zsh, you can simply add a single dot per level, i.e.

  • cd ... equals to cd ../.. and
  • cd ...... equals to cd ../../../../..

Unfortunately, this cannot be used together with other path components, i.e. commands like

cd ...../foo 

don’t work.

See also more tips on the cd command in Zsh.

I have used this for years:

alias up=" cd .." alias up2="cd ../.." alias up3="cd ../../.." alias up4="cd ../../../.." alias up5="cd ../../../../.." alias up6="cd ../../../../../.." alias up7="cd ../../../../../../.." alias up8="cd ../../../../../../../.." alias up9="cd ../../../../../../../../.." 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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