Obtenga el último directory (no el último)

Mi carpeta parent tiene el siguiente contenido:

 A.Folder B.Folder C.File 

Tiene tanto carpetas como files dentro. B.Folder es más nuevo. Ahora solo quiero get B.Folder , ¿cómo podría lograr esto? Intenté esto,

 ls -ltr ./parent | grep '^d' | tail -1 

pero me da drwxrwxr-x 2 user user 4096 Jun 13 10:53 B.Folder , pero solo necesito el nombre B.Folder .

Prueba esto:

 $ ls -td -- */ | head -n 1 

-t opciones hacen ls orderar por time de modificación, el más nuevo primero.

Si quieres eliminar / :

 $ ls -td -- */ | head -n 1 | cut -d'/' -f1 
 ls -td -- ./parent/*/ | head -n1 | cut -d'/' -f2 

La diferencia con la solución de Herson es la barra después de * , que hace que el shell ignore todos los files que no sean dir. Diferencia con Gnouc , funcionará si estás en otra carpeta.

Cortar necesita saber la cantidad de directorys principales (2) para eliminar el final '/'. Si no tienes eso, usa

 VAR=$(ls -dt -- parent/*/ | head -n1); echo "${VAR::-1}" 

Obligatorio zsh respuesta:

 latest_directory=(parent/*(/om[1])) 

Los caracteres entre paréntesis son calificadores glob : / para hacer coincidir solo los directorys, om para orderar las coincidencias al boost la edad, y [1] para retener solo la primera (es decir, la más nueva) coincidencia. Agregue N si desea get una matriz vacía (normalmente obtendrá una matriz de 1 elemento) si no hay un subdirectory de parent .

Alternativamente, suponiendo que el parent no contiene ningún caracter de globbing de shell:

 latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory 

Si no tiene zsh pero tiene herramientas GNU recientes (es decir, Linux no embedded o Cygwin), puede usar find , pero es engorroso. Aquí hay una forma:

 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 directory contenga líneas nuevas o (en algunos sistemas) caracteres no imprimibles:

 latest_directory=$(ls -td parent/*/ | head -n1) latest_directory=${latest_directory%/} 

Tu puedes hacer:

 ls -td -- ../parent/* | head -n 1