Ale*_*lls 2 directory cd-command
我有这个目录内容:
如您所见,目录名称只是时间戳 - 通常,当我是顶级目录时,我通常想打开最新的目录,该目录是具有最大时间戳值的目录,这意味着它应该排在最后(对吗?) .
有没有什么好方法可以快速cd到最后一个目录?我可以假设它们会由操作系统按时间戳排序吗?否则,这样做的肮脏方法是复制最大时间戳的值,然后运行“$ cd 1453775108178”。
无论是ls
命令和通配符,如*
以字典顺序列表的文件名。对于仅由数字组成的文件名,仅当所有文件名具有相同的数字位数时,这才对应于数字顺序。您的文件名似乎是自纪元以来的毫秒数;只要时间在 2001-09-09 01:46:40 和 2286-11-20 17:46:39.999 之间,字典顺序就可以了。
在 zsh 中,您可以使用[-1]
glob 限定符来获取最后一个匹配项。
cd *([-1])
Run Code Online (Sandbox Code Playgroud)
这可以通过多种方式进行改进,例如
cd *(/[-1])
确保只匹配目录(以防还有其他类型的文件)。cd *(-/[-1])
还包括指向目录的符号链接。cd <->([-1])
确保仅匹配仅由数字组成的名称¹。cd <->(/n[-1])
以数字而不是字典顺序对这些名称进行排序(例如,10
在 之后9
而不是在 之后1
)。zsh 中的另一种方法是利用完成。根据当前的完成设置,这或多或少是直接的。如果您设置glob_complete
选项(我这样做)并绑定reverse-menu-complete
到一个键,让我们说Shift+ Tab,这可以在您的以下代码中完成.zshrc
:
setopt glob_complete
bindkey '\e\t' reverse-menu-complete
Run Code Online (Sandbox Code Playgroud)
然后你可以输入cd *
Shift+Tab并且*
将被最后一个匹配替换。
其他 shell缺乏这个不错的功能。你可以做一个小功能。
cdlast () {
set ./*/
shift "$(($#-1))"
cd "$1"
}
Run Code Online (Sandbox Code Playgroud)
使用可选的领先-
,但鉴于以 开头的文件名-
有问题,希望您不要使用它们。