I often find myself doing commands like this
cd ../../../../../ Is there a shortcut I can use that will cd ../ n times?
79 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.
2You 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 nwill go upndirectoriesupwill go up exactly one directory (i.e., the default fornis 1)- output mimics that when using
shopt -s autocd(hence the--, which are technically unnecessary) - as before,
OLDPWDis set correctly to the current value ofPWD, rather than one of the intermediate directories. This means thatup 5; cd -works as expected.
Using the printf hack:
function updir(){ cd $(printf '../%.0s' {1..$1}) } E.G. updir 5 will move you up 5 directories.
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 ..} 1In Zsh, you can simply add a single dot per level, i.e.
cd ...equals tocd ../..andcd ......equals tocd ../../../../..
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 ../../../../../../../../.."