Prefiero no hacer esto en PHP, así que espero que alguien decente en scripts de shell pueda ayudar.
Necesito un script que se ejecute a través del directorio de forma recursiva y encuentre que todos los archivos con la última fecha de modificación es mayor que alguna fecha. Luego, alquilará y comprimirá los archivos manteniendo la información de la ruta.
Respuestas:
tan simple como:
donde
find . -mtime -1
seleccionará todos los archivos en (recursivamente) directorio actual modificado el día anterior. puedes usar fracciones, por ejemplo:fuente
-newermt
es mucho mejor.-type f
solo para seleccionar archivos. Esto mantiene la estructura de la carpeta, pero solo realiza copias de seguridad de los archivos con cambios.Si tienes GNU
find
, entonces hay una legión de opciones relevantes. El único inconveniente es que la interfaz para ellos es menos que estelar:-mmin n
(tiempo de modificación en minutos)-mtime n
(tiempo de modificación en días)-newer file
(tiempo de modificación más nuevo que el tiempo de modificación del archivo)-daystart
(ajuste la hora de inicio desde la hora actual hasta el inicio del día)La parte difícil es determinar la cantidad de minutos desde un momento.
Una opción que vale la pena considerar: usar
touch
para crear un archivo con la marca de tiempo de modificación requerida; luego usafind
con-newer
.Esto busca archivos más nuevos que 2009-01-03T12: 31: 43. Claramente, en un script,
/tmp/wotsit
sería un nombre con el PID u otro valor para hacerlo único; y habría unatrap
para garantizar que se elimine incluso si el usuario interrumpe, y así sucesivamente.fuente
-newermt '2009-01-03T12:31:43'
para evitar la necesidad de crear un archivo solo como referencia.-newermt
(documentado a continuación,-newerXY
ya que hay varias opciones; X = m, Y = t en este caso). El hallazgo de GNU en los sistemas Linux (casi arcaicos) que uso no admite las opciones, por lo que es una llegada relativamente reciente. Gracias por el aviso.-newermt '-2 weeks'
.-newermt '2009-01-03T12:31:43'
se ve increíble, pero lamentablemente parece interpretar todo en la zona horaria incorrecta: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlPuedes hacerlo directamente con alquitrán y aún mejor:
Esto le indica a tar que comprima archivos más nuevos que el 1 de enero de 2014, 18:00:00.
fuente
tar
eso vienen con OS X y FreeBSD solo--newer
que es la opción larga para-N
GNUtar
.Esto funcionará para cierto número de archivos. Desea incluir "-print0" y "xargs -0" en caso de que alguna de las rutas tenga espacios. Este ejemplo busca archivos modificados en los últimos 7 días. Para encontrar los modificados antes de los últimos 7 días, use "+7".
Como advierte esta página , xargs puede hacer que el comando tar se ejecute varias veces si hay muchos argumentos, y el indicador "-c" podría causar problemas. En ese caso, querrías esto:
No puede actualizar un archivo tar comprimido con tar, por lo que tendría que bzip2 o gzip en un segundo paso.
fuente
-type f
solo para seleccionar archivos. Esto mantiene la estructura de la carpeta, pero solo respalda los archivos con cambios / agregados recientemente.Esto debería mostrar todos los archivos modificados en los últimos 7 días.
Coloca eso en alquitrán / cremallera, y deberías ser bueno.
fuente
Simplemente haría lo siguiente para hacer una copia de seguridad de todos los archivos nuevos de hace 7 días
tenga en cuenta que también puede reemplazar 'hace 7 días' con cualquier cosa que se adapte a sus necesidades
Puede ser :
date -d'yesterday' +"%d-%b"
O incluso :
date -d'first Sunday last month' +"%d-%b"
fuente
bien debajo de Linux intente leer la página del comando find
algo como esto debería
y lo tienes
fuente
Puede obtener una lista de archivos modificados por última vez hace más de x días con:
Luego solo tiene que tar y comprimir los archivos en la lista resultante, por ejemplo:
para todos los archivos modificados durante el mes pasado.
fuente
Este script encontrará archivos con una fecha de modificación de dos minutos antes y después de la fecha dada (y puede cambiar los valores en las condiciones según sus requisitos)
Por ejemplo, usted quiere tener los archivos de la fecha de modificación antes de la fecha dada solamente, usted puede cambiar
120
a0
en el$DIFF_IN_DATE
parámetro de desechar las condiciones del$DIFF_IN_DATE1
parámetro.Del mismo modo, si desea que los archivos tengan una fecha de modificación 1 hora antes y después de una fecha determinada, simplemente reemplácela
120
por3600
inif CONDITION
.fuente