Se você está certo em executar ls
novamente, você pode usar uma função bash:
function cd1()
{
# cd to most recently modified directory in current path
local c=$(ls -tF | grep '/$' | head -n 1)
if [ ! -z "$c" ]; then cd "$c"; fi
}
Quando eu navego por registros, eu uso ls -lt
para ver as pastas modificadas mais recentemente. Existe um atalho para inserir esta pasta em um comando?
Talvez pipe para outro comando vai fazer o truque?
Por exemplo: ls -lt
output:
1 -folder
2 -folder
3 -folder
Como eu posso cd
para a pasta 1 sem copiar e colar seu nome?
Uma maneira muito mais feia é criar um alias no qual capturamos a primeira linha do diretório * enquanto deixamos todas as linhas irem para a stdout:
alias ls-lt='ls -lt | awk --re-interval '\'' {print}; /^d/ && !first {sub( /^([^ ]+ +){8}/, ""); print $0 > "/tmp/first.tmp"; first=$0}'\''; eval cd "$(cat /tmp/first.tmp)"'
Aqui você deve usar ls-lt em vez de ls -lt, vendo a mesma saída e cd-ing ao mesmo tempo.
Aqui está o comando mais curto de qualquer uma das respostas fornecidas até o momento. Bem, na verdade, ele não responde à questão, já que tecnicamente a questão é analisar a saída de " ls -lt
". No entanto, se eu assumir que a finalidade de " ls -lt
" é mostrar diretórios classificados por hora, essa resposta realmente atingirá a meta pretendida.
cd "$( ls -1Ft | grep /$ | head -1 )"
(Nota: Os parâmetros para o comando "ls" e o comando "head" contém um número, não um L minúsculo.)
Edit: Acabei de adicionar aspas, porque alguns testes mostraram que eles fazem com que o comando também funcione se o diretório tiver um espaço no nome do diretório.