2011-04-26 9 views
10

Deseo obtener todos los archivos después de una fecha específica. Intenté con:Lista de archivos después de una fecha

ls -ltr | awk {'print $6'} | sed s/-//g | awk {'if ($1-20110415 > 0) {print $1}'} 

que funciona 50% bien. El último comando imprime solo la fecha del archivo. ¿Cómo imprimir la fecha del archivo y el nombre del archivo? En el awk $8 es el nombre de archivo, pero no sé cómo transferir hasta el último print en la línea de comandos.

Gracias, Lucas

+0

No use 'ls' para analizar archivos. Use 'find' – ghostdog74

Respuesta

0

¿Qué pasa con esta versión ligeramente modificada?

ls -ltr | awk {'print $6 " " $8 '} | sed s/-//g | awk {'if ($1-20110426 > 0) {print $1 " " $2}'} 

Parece que me hace el truco ...?

+0

Lo intenté pero devuelve la lista vacía. – Luke

+0

Ok, eso es raro, porque funciona bien aquí ... – Oct

+0

Ops ... lo siento ... No te vi configurar la fecha "26" ... Lo configuré de nuevo a 15 ... y funciona bien si el nombre de archivo no incluye el símbolo "-". De lo contrario, ¿cómo puedo hacerlo? Gracias – Luke

0

¿Qué le parece usar find con uno de sus diversos interruptores basados ​​en el tiempo, y luego usar printf para especificar qué campos desea visualizar? Puede encontrar todas las opciones en las páginas man.

EDITAR - No estoy en un entorno adecuado para dar un ejemplo en este momento - Voy a tratar de actualizar la respuesta mañana

+0

bien. Vi que el tiempo toma solo un número que es el número de días. También probé -newer "2011-04-15" pero devuelve error. He encontrado este ejemplo toque -t 'date +% m% d0000'/tmp/$$ encontrar/tmefndr/oravl01 type f -newer/tmp/$$ rm/tmp/$$ pero yo soy buscando otra forma sin tocar el comando – Luke

+0

Sí, podría crear un archivo temporal, tocarlo con la fecha requerida y hacer la comparación con -nego ... No había pensado en eso como una forma de obtener la hora exacta que desea . Sin embargo, el interruptor "daystart" puede ser útil para usted. Efectivamente hace comparaciones basadas en el día de actaul en cuestión (ej.más reciente que 12:45 pm el 3 de abril de 2010, devolverá todos los archivos más nuevos que 00:00 el 4/3/10) Podría ayudarlo a obtener lo que necesita ... – ZombieSheep

17

Trate find comando como este:

find /my/path -mtime -1 # to get files modified in last 1 day 

find /my/path -mtime -1.5 # to get files modified in last 1.5 day 
+0

(darwin) ./ -mtime -1.5 find: - mtime: -1.5: unidad mala '.' – obimod

+0

Sí, la versión de búsqueda en OSX es anterior y solo admite números enteros en '-mtime' – anubhava

4

Si está buscando una forma de encontrar archivos actualizados y procesarlos, puede touch un archivo después de que finalice su proceso y usar find's -newer:

-newer file 
    File was modified more recently than file. 

Así que cuando se necesita una lista de los archivos de actualización, que querría hacer esto:

find /path/to/dir -newer touched.file

Esto habría de forma recursiva una lista de todos los archivos en/path/to/dir que tienen una fecha de modificación que es más tarde que tocó.archivo. No se olvide de tocar ese archivo.todo tocado nuevamente cuando termine de procesar los archivos actualizados o tome nota de qué archivo probar en su próxima iteración.

Cuestiones relacionadas