Resposta obrigatória do zsh:
latest_directory=(parent/*(/om[1]))
Os caracteres entre parênteses são qualificadores globais : /
para corresponder apenas aos diretórios, om
para classificar correspondências aumentando a idade e [1]
para reter apenas a primeira correspondência (ou seja, a mais nova). Adicione N
se você deseja obter uma matriz vazia (normalmente você obtém uma matriz com 1 elemento) se não houver subdiretório de parent
.
Como alternativa, supondo que parent
não contenha nenhum caractere globbing do shell:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Se você não possui o zsh, mas possui ferramentas GNU recentes (por exemplo, Linux ou Cygwin não incorporado), pode usá- find
lo, mas é complicado. Aqui está uma maneira:
latest_directory_inode=$(find parent -mindepth 1 -maxdepth 1 -type d -printf '%Ts %i\n' | sort -n | sed -n '1 s/.* //p')
latest_directory=$(find parent -maxdepth 1 -inum "$latest_directory_inode")
Existe uma solução simples ls
, que funciona desde que nenhum nome de diretório contenha novas linhas ou (em alguns sistemas) caracteres não imprimíveis:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'