La solución anterior no tiene en cuenta cosas como archivos que se escriben y eliminan del directorio, lo que hace que se devuelva el directorio superior en lugar del subdirectorio más nuevo.
El otro problema es que esta solución asume que el directorio solo contiene otros directorios y no archivos que se escriben.
Digamos que puedo crear un archivo llamado "test.txt" y vuelva a ejecutar de nuevo este comando:
echo "test" > test.txt
ls -t /backups | head -1
test.txt
El resultado es test.txt aparecer en lugar del último directorio modificado.
La solución propuesta "funciona" pero solo en el mejor de los casos.
Asumiendo que tienen una profundidad máxima de 1 directorio, una mejor solución es utilizar:
find /backups/* -type d -prune -exec ls -d {} \; |tail -1
sólo cambio el "//backups" parte de su trayectoria real.
Si desea evitar mostrar una ruta absoluta en una escritura del golpe, siempre se puede usar algo como esto:
LOCALPATH=/backups
DIRECTORY=$(cd $LOCALPATH; find * -type d -prune -exec ls -d {} \; |tail -1)
A pesar de ser aceptado y muy votado, hay varios problemas con esta solución. No funciona si el elemento más nuevo en el directorio no es un directorio. No funciona si el subdirectorio más nuevo tiene un nombre que comienza con '.'. No funciona si el subdirectorio más nuevo tiene un nombre que contiene una nueva línea. [Shellcheck] (http://www.shellcheck.net/) se queja del uso de 'ls'. Ver [ParsingLs - Wiki de Greg] (http://mywiki.wooledge.org/ParsingLs) para una explicación detallada de los peligros de procesar la salida de 'ls'. – pjh