bash: cd al directorio secundario modificado más recientemente

10

Preguntándose si hay una manera fácil y / o portátil de decir "cambiar al directorio secundario modificado más recientemente". Puedo usar ls y awk pero probablemente haya una mejor manera.

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

Tengo que ejecutar un comando en un directorio de "archivos de salida" con cientos de subdirectorios y el 99% del tiempo quiero ir al directorio cambiado más recientemente. No sé cuáles serán los nombres de los directorios de antemano.

twblamer
fuente
1
¿Por qué no cd $(ls -v1td */ | head -1)?
Pablo Castellazzi
Buen punto ... No estoy tan familiarizado con las opciones de ls como debería estar ...
twblamer

Respuestas:

13

Suponiendo que sus directorios no contengan caracteres no imprimibles:

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

(tenga en cuenta que también considerará enlaces simbólicos a directorios).

Si no te importa cambiar a zsh:

cd ./*(/om[1])

O para incluir enlaces simbólicos a directorios como en el primer ejemplo:

cd ./*(-/om[1])
Gilles 'SO- deja de ser malvado'
fuente
0

Disfrutar.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}
jasonleonhard
fuente
¿Por qué poner el nombre del directorio en el portapapeles? Además, vea qué sucede si el nombre del directorio contiene un espacio, algo bastante común en estos días.
roaima
El uso del portapapeles le permite realizar más operaciones si lo desea.
jasonleonhard
Si realmente lo desea, puede agregar más campos relativamente fácil. en lugar de {print $ 9} puede usar {print $ 9, $ 10, $ 11} tantas como desee.
jasonleonhard
He revisado mi respuesta para tener en cuenta el espacio en blanco.
jasonleonhard
He aquí una explicación aproximada: explainshell.com/...
jasonleonhard
-1

Prueba este breve comando versionado

cd $(ls -t | head -n 1)   
Misal de Swapnil
fuente
Eso solo funciona si el archivo modificado más recientemente en el directorio actual es de tipo directorio (o enlace simbólico al directorio) y su nombre no contiene espacios en blanco o comodines o líneas nuevas y no comienza con, por lo que no es una mejora con respecto al Respuesta ya aceptada.
Stéphane Chazelas