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

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

我有这个目录内容:

在此输入图像描述

正如您所看到的,目录名称只是时间戳 - 一般来说,当我是顶级目录时,我通常想打开最近的目录,这是具有最大时间戳值的目录,这意味着它应该排在最后(对吗?) 。

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

答案1

命令ls和通配符,例如*按字典顺序列出文件名。对于仅由数字组成的文件名,仅当所有文件名具有相同的数字位数时,这才对应于数字顺序。您的文件名似乎是自纪元以来的毫秒数;只要时间在 2001-09-09 01:46:40 和 2286-11-20 17:46:39.999 之间,字典顺序就适合您。

在zsh中,您可以使用[-1] 全局限定符参加最后一场比赛。

cd *([-1])

这可以通过多种方式进行细化,例如

  • 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

然后你可以输入cd *Shift+ Tab,它将*被最后一个匹配项替换。

其他贝壳缺少这个好功能。你可以做一个小功能。

cdlast () {
  set ./*/
  shift "$(($#-1))"
  cd "$1"
}

使用可选的前导-,但考虑到以 开头的文件名-是有问题的,希望您不要使用它们。

答案2

如果您只创建了目录,则可以使用 -- 找到最后一个文件 /dir

ls -tr1 |tail -1
to cd to it --
cd $(ls -tr1 | tail -1)

如果您同时拥有文件和目录,则需要做更多工作 -

cd $(ls -ltr |grep ^d |tail -1 | awk '{print $9}')

其他选项 - 使用 mtime 查找(您需要知道创建目录以进行过滤时的窗口) 由于如果目录很大(100k+ 文件),所有这些命令可能需要很长时间才能运行,因此最好的方法是创建一个包含最后创建的目录的文件,并使用它来 cd 到最新的目录。

答案3

您可以在 .bashrc 文件中创建别名或函数 - 例如:

alias lcd="cd $( ls -1 | tail -1 )"

或者

lcd() { cd $( ls -1 | tail -1 ) ; }

答案4

如果您可以控制创建目录的过程,则可以对其进行调整,以便它始终写入一个名为指向latest最新目录的符号链接。

这就是我在从数码相机卡中提取照片的脚本中所做的,它对我来说非常有效:

$ ls -loghd pictures/[12l]*
dr-xr-xr-x  4 4.0K May 24  2012 pictures/1989
dr-xr-xr-x  6 4.0K May 24  2012 pictures/1990
...
dr-xr-xr-x 38 4.0K Dec 15 19:59 pictures/2015
drwxr-xr-x  3 4.0K Jan 10 23:03 pictures/2016
lrwxrwxrwx  1   34 Jan 10 23:03 pictures/latest -> 2016/2016-01-10

相关内容