You cd into a lot of deep directories and would like to type cd ….. instead of cd ../ ../../.. to move up four levels.
Use this function:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# cookbook filename: func_cd # Allow use of 'cd ...' to cd up 2 levels, 'cd ....' up 3, etc. (like 4NT/4DOS) # Usage: cd ..., etc. function cd { local option= length= count= cdpath= i= # Local scope and start clean # If we have a -L or -P sym link option, save then remove it if [ "$1" = "-P" -o "$1" = "-L" ]; then option="$1" shift fi # Are we using the special syntax? Make sure $1 isn't empty, then # match the first 3 characters of $1 to see if they are '...' then # make sure there isn't a slash by trying a substitution; if it fails, # there's no slash. Both of these string routines require Bash 2.0+ if [ -n "$1" -a "${1:0:3}" = '...' -a "$1" = "${1%/*}" ]; then # We are using special syntax length=${#1} # Assume that $1 has nothing but dots and count them count=2 # 'cd ..' still means up one level, so ignore first two # While we haven't run out of dots, keep cd'ing up 1 level for ((i=$count;i<=$length;i++)); do cdpath="${cdpath}../" # Build the cd path done # Actually do the cd builtin cd $option "$cdpath" elif [ -n "$1" ]; then # We are NOT using special syntax; just plain old cd by itself builtin cd $option "$*" else # We are NOT using special syntax; plain old cd by itself to home dir builtin cd $option fi } # end of cd |
The cd command takes an optional -L or -P argument that respectively follow symbolic links or follow the physical directory structure.
Either way, we have to take them into account if we want to redefine how cd works. Then, we make sure $1 isn’t empty and match the first three characters of $1 to see if they are ‘…’.
We then make sure there isn’t a slash by trying a substitution; if it fails, there’s no slash. Both of these string routines require bash version 2.0+.
After that, we build the actual cd command using a portable for loop and finally use the builtin command to use the shell cd and not create an endless loop by recursively calling our cd function.
We also pass in the -L or -P argument if present.
BASH Shell commands cd ( commands for linux )