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.


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])

0

Disfrutar.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}

¿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)   

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.