cd para o diretório modificado mais recentemente após ls -lt em um comando

2

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?

    
por Farseer 03.03.2016 / 14:25

3 respostas

2

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
}
    
por 03.03.2016 / 14:51
1

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.

  • Esteja ciente de que, se um arquivo regular é criado em seu diretório principal, esse pode ser o primeiro elemento de ls -lt que obviamente não é um assunto de cd.
por 03.03.2016 / 16:00
1

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.

    
por 03.03.2016 / 17:41

Tags