diff --git a/upto.sh b/upto.sh index 41894dc..c6acc40 100755 --- a/upto.sh +++ b/upto.sh @@ -1,33 +1,7 @@ #!/bin/bash -function upto() { - local EXPRESSION="$1" - if [ -z "$EXPRESSION" ]; then - echo "A folder expression must be provided." >&2 - return 1 - fi - if [ "$EXPRESSION" = "/" ]; then - cd "/" - return 0 - fi - local CURRENT_FOLDER="$(pwd)" - local MATCHED_DIR="" - local MATCHING=true - - while [ "$MATCHING" = true ]; do - if [[ "$CURRENT_FOLDER" =~ "$EXPRESSION" ]]; then - MATCHED_DIR="$CURRENT_FOLDER" - CURRENT_FOLDER=$(dirname "$CURRENT_FOLDER") - else - MATCHING=false - fi - done - if [ -n "$MATCHED_DIR" ]; then - cd "$MATCHED_DIR" - return 0 - else - echo "No Match." >&2 - return 1 - fi +function upto() { + local D="${PWD%"${PWD#*/*([^/])$1*/}"}" + [[ -z "$D" ]] || cd "$D" } # complete upto @@ -36,6 +10,6 @@ _upto () { local cur prev words cword _init_completion || return - COMPREPLY+=( $( compgen -W "$( echo ${PWD//\// } )" -- $cur ) ) + COMPREPLY+=( $( compgen -W "${PWD//\// }" -- $cur ) ) } complete -F _upto upto