O comando ls
e curingas, como *
listam nomes de arquivos em pedidos lexicográficos. Para nomes de arquivos que consistem apenas de dígitos, isso corresponde à ordem numérica somente se todos os nomes de arquivos tiverem o mesmo número de dígitos. Seus nomes de arquivos parecem ser milissegundos desde a época; contanto que os tempos estejam entre 2001-09-09 01:46:40 e 2286-11-20 17: 46: 39.999, a ordem lexicográfica é boa para você.
Em zsh , você pode usar o qualificador de glob [-1]
para fazer o último jogo.
cd *([-1])
Isso pode ser refinado de várias maneiras, como
-
cd *(/[-1])
para garantir que apenas diretórios sejam correspondidos (no caso de existirem outros tipos de arquivos). -
cd *(-/[-1])
para incluir também links simbólicos para diretórios. -
cd <->([-1])
para garantir que apenas os nomes que consistem apenas em dígitos¹ sejam correspondidos. -
cd <->(/n[-1])
para classificar esses nomes em ordem numérica em vez de lexicográfica (por exemplo,10
classificado após9
em vez de apenas1
).
Outra abordagem no zsh é fazer uso da conclusão. Isso é mais ou menos simples, dependendo das configurações atuais de conclusão. Se você definir a glob_complete
opção (que eu faço) e vincular reverse-menu-complete
para uma chave, digamos Shift + Tab , que pode ser feito com o seguinte código no seu .zshrc
:
setopt glob_complete
bindkey '\e\t' reverse-menu-complete
então você pode digitar cd *
Deslocar + Tab e o *
será substituído pela última correspondência.
Outros shells não têm essa funcionalidade legal. Você pode fazer uma pequena função.
cdlast () {
set ./*/
shift "$(($#-1))"
cd "$1"
}
Com um líder opcional -
, mas considerando que os nomes de arquivos iniciados por -
são problemáticos, esperamos que você não os use.