Respuesta zsh obligatoria:
latest_directory=(parent/*(/om[1]))
Los caracteres entre paréntesis son calificadores globales : /
para hacer coincidir solo directorios, om
ordenar coincidencias al aumentar la edad y [1]
retener solo la primera coincidencia (es decir, la más reciente). Agregue N
si desea obtener una matriz vacía (normalmente obtiene una matriz de 1 elemento) si no hay un subdirectorio de parent
.
Alternativamente, suponiendo que parent
no contenga ningún carácter globbing de shell:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Si no tiene zsh pero tiene herramientas recientes de GNU (es decir, Linux o Cygwin no integrados), puede usarlo find
, pero es engorroso. Aquí hay una manera:
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")
Hay una solución simple con ls
, que funciona siempre que ningún nombre de directorio contenga nuevas líneas o (en algunos sistemas) caracteres no imprimibles:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'