cd 进入最后一个字母数字目录

Ale*_*lls 2 directory cd-command

我有这个目录内容:

在此处输入图片说明

如您所见,目录名称只是时间戳 - 通常,当我是顶级目录时,我通常想打开最新的目录,该目录是具有最大时间戳值的目录,这意味着它应该排在最后(对吗?) .

有没有什么好方法可以快速cd到最后一个目录?我可以假设它们会由操作系统按时间戳排序吗?否则,这样做的肮脏方法是复制最大时间戳的值,然后运行“$ cd 1453775108178”。

Gil*_*il' 6

无论是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)

使用可选的领先-,但鉴于以 开头的文件名-有问题,希望您不要使用它们。