Quiero enumerar todos los archivos (ordenados por fecha) que son más nuevos que la marca de tiempo en formato 20130207003851en el directorio / tmp solamente. Los subdirectorios pueden omitirse.
Uso de SUSE Linux Enterprise Server 11.
El formato de salida debe ser
S0002948.LOG Feb 7 03:28
S0002935.LOG Feb 7 05:58
S0002952.LOG Feb 7 09:58
S0002940.LOG Feb 7 11:58
find / tmp -newermt "7 feb 2013" -ls enumera los archivos que quiero pero
- ¿Cómo puedo usar la marca de tiempo en un formato 20130207003851
- ¿Cómo puedo ordenar la salida?
- ¿Cómo puedo mostrar solo el nombre y la fecha del archivo? Nombre de archivo primero y luego la fecha?
ps No quiero usar el toque para crear un archivo de referencia para encontrar
pss
find -newermt "20130207003851" -ls
find: I cannot figure out how to interpret `20130207003851' as a date or time
shell-script
find
ls
timestamps
Radek
fuente
fuente

2013007000385supone que representa? Supongo que 2013 es el año, pero ¿cómo se llega007000385al 7 de febrero?20130207003851. No lo copié correctamente o ... perdón por eso.Respuestas:
findadmite muchos formatos de entrada de fecha . El formato más simple para obtener es AAAAMMDD HH: MM: SS. Ya tiene los dígitos en el orden correcto, todo lo que tiene que hacer es extraer el primer grupo (${timestamp%??????}: tome todos menos los últimos 6 caracteres;:${timestamp#????????}tome todos menos los primeros 8 caracteres), y continúe, agregando puntuación y luego el siguiente grupo a medida que avanza.En bash (y ksh y zsh), pero no en ash, puede usar la
${STRING_VARIABLE:OFFSET:LENGTH}construcción más legible .Para ordenar los archivos por fecha, imprima los nombres de archivo precedidos por las fechas y ordénelo, luego elimine el prefijo de la fecha. Use
-printfpara controlar el formato de salida. imprime una parte del tiempo de modificación determinado por ; si es así , obtiene el número de segundos desde la época de Unix. A continuación imprimo tres columnas separadas por tabuladores: la hora en formato ordenable, el nombre del archivo y la hora en formato legible por humanos; elimina la primera columna y la llamada para reemplazar la pestaña por suficientes espacios para acomodar todos los nombres de archivo esperados (ajuste 40 como desee). Este código supone que no tiene líneas nuevas o pestañas en los nombres de archivo.%TXXX@cut -f 2-expandfuente
find -newermt "$timestring" -printf '%M@\t%f %Mb %Md %MH:%MM\n'me da una salida divertida-rwxrwxrwx@ S0002975.LOG -rwxrwxrwxb -rwxrwxrwxd -rwxrwxrwxH:-rwxrwxrwxM%Tpor el momento,%Mson los permisos.find /tmp -maxdepth 1 -type f -newermt "20130207 00:38:51" -printf '%T@\t%f-%Tb %Td %TH:%TM\n' | sort -k1n | cut -f 2-que separé el nombre y la hora del archivo-porque capturaré la salida en php y la usaré como separador. Muchas gracias.Con
zsh:Las
newerfunciones devuelve true de archivos más recientes que$timestamp(nota quezsh'szstatno es compatible con una precisión por debajo del segundo, aunque).Luego, todo lo que hacemos es usar
zshcalificadores globales:Dpara incluir archivos de puntos,.para considerar solo archivos regulares,Ompara ordenar el tiempo de modificación y+newerpara llamar a lanewerfunción para determinar qué archivo seleccionar.Si desea mostrar también las marcas de tiempo del archivo, puede cambiar
newera:Sin embargo, tenga en cuenta que el resultado de la generación del nombre de archivo incluirá las marcas de tiempo, lo que significa que ya no puede usarlas como nombres de archivo.
fuente
ssh, por ejemplo.