我有一堆目录:
20130118-Cars_Directory
20130118-Bikes_Directory
20130218-Planes_Directory
20130228-Scooters_Directory
有没有办法通过在命令中间输入部分匹配的方式来更改目录。
理想情况下,采用某种风格的cd *Bikes*<TAB>
,并让 dash 自动完成其余部分?
答案1
您可以通过为 cd 创建别名并根据需要定义 bash 补全来实现这一点。请参阅巴赫完成手册。
以下是分步指南。我将使用“scd”作为新命令,但您也可以使用“cd”。
1)编辑.bashrc文件
gedit ~/.bashrc
2)创建别名
将其粘贴到“.bashrc”文件的最后:
# Alias for making a "Super cd"
alias scd="cd"
_scd_completion() {
mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _scd_completion scd
保存并关闭。
3)打开一个新终端
或者运行: source ~/.bashrc
4)如何使用
只需调用该命令,后跟您要去的目录的名称的一部分。
scd Bikes<TAB>
完成。尽情享用吧!
答案2
事实上,巧合的是,它cd *Bikes*<RETURN>
无需对系统进行任何更改就可以工作。
我只是有点震惊它不需要引号*Bikes*
。
答案3
尝试使用名为是,它可以满足您的需要,另外它还会创建一个按频率加权的 CD 全局数据库,并允许您立即跳转到经常访问的地方。
如果你已经访问过 Bikes 目录,你可以稍后输入
z Bikes
你会跳到那里
答案4
desuga 的回答可以,但区分大小写。
如果您不想区分大小写,则文件~/.bashrc
应该是:
# Alias for making a "Super cd"
alias scd="cd"
_scd_completion() {
mapfile -t COMPREPLY < <(ls -d */ | grep -i "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _scd_completion scd