答案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