¿Puedo enumerar los archivos ordenados por fecha en que se agregaron a una carpeta desde una herramienta de línea de comandos como ls?

Necesito crear una secuencia de comandos que muestre los archivos en el mismo orden que la carpeta Descargas predeterminada en el Dock, ordenados por Fecha de adición, primero los más nuevos. Parece que no puedo encontrar la opción en ls.

¿Alguna otra forma de hacerlo?

Mostrarlo donde ?
¡Línea de comandos! ¡Entendido! Terminé escribiendo una sola línea que hace el truco. Como no tengo mucha reputación, no puedo responder mi propia pregunta todavía, lo haré más tarde.
Bienvenido al sitio Ramiro - deberías poder responder a tu propia pregunta en cualquier momento - pero habrá una restricción para que puedas "marcar como aceptada" tu respuesta. Siéntase libre de editar mi respuesta para satisfacer sus necesidades o proporcionar su propia respuesta si lo desea.

Respuestas (3)

Solución más simple (más rápida):

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
si, mucho mejor :)
¿Alguien podría detallar qué hace cada una de esas líneas? Además, ¿esta solución se puede realizar en Terminal como líneas de comando individuales (secuencialmente, una tras otra) o solo dentro de un script?
Línea 1: mdls es la herramienta de lista de metadatos de Mac. Escriba man mdls para la documentación. Esto no funciona en otros problemas de Linux. Hay muchas claves de metadatos. Las banderas -name seleccionan solo los dos que queremos, el nombre del archivo y su fecha agregada. El indicador -raw separa los valores devueltos con un carácter nulo. La estrella enumera todos los archivos. Sustituye el directorio y cualquier otro filtro global que desee. La tubería da salida al siguiente comando. IOW este es un solo comando. De hecho, puede hacer esto de forma interactiva en la terminal. Si quisiera hacerlos individualmente, podría enviar cada paso a un archivo.
Línea 2: A veces, las tuberías no colocan la salida donde el siguiente comando necesita que vaya el argumento. El indicador -0 dice que la entrada que proviene de la canalización anterior está delimitada con un carácter nulo. El indicador -I establece una cadena de reemplazo. Las llaves son una convención. Puede usar cualquier carácter que no espere en la entrada. Tiendo a usar un signo de porcentaje. En este caso, xargs ejecuta el comando echo para cada salida de la tubería anterior, colocándolo donde está la cadena de reemplazo, "{}". Luego eso se canaliza al siguiente comando.
Línea 3: Este es el editor de secuencias, sed. La herramienta sed edita texto y hace las cosas habituales que esperaría con cadenas, pero tiene sus propios sabores sintácticos. Busque hombre sed para ver más. Aquí hay dos comandos, N y s, que significan siguiente y sustituto. José eligió N aquí porque obtenemos dos claves de metadatos a la vez. Para cada entrada, decimos, está bien, tengo una. Antes de hacer nada, consigue otro también. Ahora ejecute el comando s. Aquí decimos que para cualquier carácter de nueva línea, sustituya un espacio. Luego canalice esos resultados a la siguiente herramienta.
Línea 4: Se explica por sí mismo. Agrego el indicador -r al tipo para obtener un orden inverso. Quiero saber los archivos agregados más recientemente. Luego lo canalizo a la herramienta principal para los de arriba. A continuación, estoy creando un alias para poder repetir esto fácilmente.
Esto funciona pero es bastante lento, incluso cuando no hay muchos archivos en el directorio actual. De todos modos para acelerar esto?

La fecha agregada se almacena como elemento de metadatos kMDItemDateAddedy el mdlscomando expondrá los datos de cada archivo pasado como argumento.

Por lo tanto, para volcar la fecha agregada para todos los archivos en Descargas en cualquier orden arbitrario * expandido por su shell, puede:

mdls -name kMDItemDateAdded ~/Descargas/*

Necesitará combinar alguna combinación de find y sed/awk/perl/lo que sea para ensamblar un reemplazo, lspero tal vez su secuencia de comandos pueda llamar a mdfind en lugar de tener que reinventar lsy analizar esa salida.

¡Sí! Lo encontré más tarde e hice un hermoso delineador que me enseñó muchas cosas :) Gracias por la ayuda
Pegue ese delineador editando mi respuesta: ¡comparta el conocimiento!

Bueno, como de costumbre, después de escribir la pregunta, comencé a buscar contenido de metadatos en los archivos y terminé escribiendo esto:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

Básicamente: 1. enumera todos los archivos 2. filtra. y .. 3. obtiene el nombre y la fecha agregados, una línea después de la otra 4. fusiona cada dos líneas en 1 línea 5. extrae la fecha, la hora y el nombre 6. lo ordena a la inversa (dado que la fecha y hora es inicial, se ordena por fecha y hora)

¡Espero que ayude a alguien más! :)

@bmike en realidad, el sitio me impuso una restricción para responder mi propia pregunta solo después de 8 horas de haber publicado mi pregunta, debido a mi falta de reputación :D

oh, dividí el delineador en varias líneas solo para mayor claridad :)
Use ls -Aen lugar de -apara no tener que usar grep -vfor .y ...