有没有办法根据最后一个字符 cd 进入目录?

有没有办法根据最后一个字符 cd 进入目录?

我有以 开头的目录164,但它们根据最后几位数字而有所不同。我想根据最后几位数字(如果不是最后一位数字本身) cd 进入目录,例如9vs 8。目录的最后一位数字是唯一的。可以这样做吗?当我从第一个数字开始时,自动完成功能列出了多种可能性164

答案1

对于 Bash,是的,您可以使用通配符:

cd /path/to/*9/

(替换为您需要的任意数字;如果您位于包含所有目录的目录中,则9可以删除)。/path/to/164...

您需要确保表达式足够具体以解析为单个目录,否则cd将更改为其参数中指定的第一个目录(在版本 4.4 之前的 Bash 中),或者失败并出现错误(Bash 4.4 及更高版本使用 构建CD_COMPLAINS)。 (请注意 Zsh 或 Ksh,它们具有两个参数的形式,cd您可能会意外调用它们,尽管只有当您的当前路径包含第一个参数时。)

您还可以在输入上述命令后、执行之前使用制表符补全;如果多个目录匹配,您的 shell 会将它们全部列出。

答案2

如果他们是实际上除了最后几位数字外,其他数字都不同,您可以在 cd 命令中使用通配符,例如,

cd 164*8

(如果它们实际上并不不同,shell 会通过生成错误消息来提醒您)。

答案3

你可以做一些定制的事情。

mycd() {
    local ng=$( shopt -p nullglob )
    shopt -s nullglob
    local status

    local matches=( *"$1"/ )  # directories ending in the parameter
    case ${#matches[@]} in
        0) echo "no directory ends with $1" >&2; status=1 ;;
        1) cd "${matches[0]}"; status=$? ;;
        *) echo "multiple directories end with $1" >&2; status=1 ;;
    esac

    $ng   # restore the previous nullglob setting. specifically unquoted
    return $status
}

mycd 89  # cd to the subdir ending with 89

当有多个匹配目录时,可以扩展为使用 select 语句,以允许您选择所需的目录。

相关内容