bash: cd para o diretório filho modificado mais recentemente

10

Pensando se existe uma maneira fácil e / ou portátil de dizer "mude para o diretório filho modificado mais recentemente". Eu posso usar sl e awk, mas provavelmente existe uma maneira melhor.

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

Eu tenho que executar um comando em um diretório "arquivos de saída" com centenas de subdiretórios e 99% do tempo em que quero ir para o diretório alterado mais recentemente. Não sei quais serão os nomes dos diretórios com antecedência.

twblamer
fonte
11
Por que não cd $(ls -v1td */ | head -1)?
Pablo Castellazzi
Bom ponto ... Eu não sou tão familiarizado com as opções ls como eu deveria estar ...
twblamer

Respostas:

13

Supondo que seus diretórios não contenham caracteres não imprimíveis:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(observe que ele também considerará links simbólicos para diretórios).

Se você não se importa de mudar para zsh:

cd ./*(/om[1])

Ou para incluir links simbólicos para diretórios como no primeiro exemplo:

cd ./*(-/om[1])
Gilles 'SO- parar de ser mau'
fonte
0

Aproveitar.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}
jasonleonhard
fonte
Por que colocar o nome do diretório na área de transferência? Além disso, veja o que acontece se o nome do diretório contiver um espaço - uma ocorrência bastante comum nos dias de hoje.
roaima
O uso da área de transferência permite facilidade de operações adicionais, se você desejar.
Jasonleonhard # 10/17
Se você realmente deseja, pode adicionar outros campos de maneira relativamente fácil. em vez de {print $ 9}, você pode usar {print $ 9, $ 10, $ 11} quantas desejar.
Jasonleonhard # 10/17
Revisei minha resposta para explicar o espaço em branco.
Jasonleonhard # 10/17
Aqui está uma explicação áspera: explainshell.com/...
jasonleonhard
-1

Experimente este comando com versão curta

cd $(ls -t | head -n 1)   
Swapnil Misal
fonte
Isso só funciona se o arquivo modificado mais recentemente no diretório atual for do tipo diretório (ou link simbólico para o diretório) e seu nome não contiver espaços em branco ou curingas ou novas linhas e não começar com -, portanto, dificilmente será uma melhoria em relação ao diretório resposta já aceita.
Stéphane Chazelas