我有以 开头的目录164
,但它们根据最后几位数字而有所不同。我想根据最后几位数字(如果不是最后一位数字本身) cd 进入目录,例如9
vs 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 语句,以允许您选择所需的目录。