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

10

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

¿Alguna otra forma de hacerlo?

Ramiro Araujo
fuente
¿Mostrarlo dónde ?
Rob
¡Línea de comando! ¡Lo tengo! Terminé escribiendo un trazador de líneas que hace el truco. Como no tengo mucha reputación, todavía no puedo responder mi propia pregunta, lo haré más tarde.
Ramiro Araujo
Bienvenido al sitio Ramiro, debe poder responder su propia pregunta en cualquier momento, pero habrá una restricción para que "marque como aceptada" su respuesta. Siéntase libre de editar mi respuesta para satisfacer sus necesidades o de proporcionar su propia respuesta si lo desea.
bmike

Respuestas:

6

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

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Jose Alban
fuente
1
sí, mucho mejor :)
Ramiro Araujo
¿Podría alguien detallar lo que hace cada una de esas líneas? Además, ¿se puede realizar esta solución en la Terminal como líneas de comando individuales (secuencialmente, una tras otra), o solo dentro de un script?
EJ Mak
4

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

Entonces, para volcar la fecha agregada para todos los archivos en Descargas en cualquier orden arbitrario * que su shell expanda, puede:

mdls -name kMDItemDateAdded ~ / Descargas / *

Tendrá que hackear alguna combinación de find y sed / awk / perl / lo que sea para armar un reemplazo, lspero quizás su script pueda invocar mdfind en lugar de tener que reinventar lsy analizar esa salida.

bmike
fuente
1
¡Si! Lo encontré más tarde e hice un hermoso liner que me enseñó muchas cosas :) Gracias por la ayuda
Ramiro Araujo
2
Pegue ese forro editando mi respuesta: ¡comparta el conocimiento!
bmike
2

Bueno, como de costumbre, después de escribir la pregunta, empiezo 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. combina cada dos líneas en 1 línea 5. extrae la fecha, la hora y el nombre 6. lo ordena al revés (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 publicar mi pregunta, debido a mi falta de reputación: D

Ramiro Araujo
fuente
oh, dividí el revestimiento en varias líneas solo por claridad :)
Ramiro Araujo
1
Úselo en ls -Alugar de -apara que no tenga que hacerlo grep -vpor .y ...
mfilej
0

hombre ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).
Jason
fuente
1
no, necesito la fecha agregada, no la fecha de creación. Igual que la carpeta de descargas predeterminada en el muelle
Ramiro Araujo
¿Cómo se agrega la fecha no es igual a la fecha de creación?
Jason
1
Jason: la fecha de creación es cuando se creó el archivo, por lo que cuando Safari descarga un archivo de otra computadora, se creó claramente para esa descarga o podría haberse creado meses o años antes de que ocurra la descarga. Consulte mi respuesta para obtener detalles sobre dónde se almacenan estos datos en OS X.
bmike