¿Confundido por este comando `find` en un script Bash?

8

Tengo un script bash, creado por alguien que ya no es capaz de explicar el significado, que se utiliza para tarar automáticamente una carpeta y hacer una copia de seguridad. Por el momento estoy confundido con la línea final:

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

El guión completo está abajo.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END
MODS Eliminar cuenta
fuente
3
No hay preguntas de seguimiento, una pregunta por pregunta. Puedes hacer tantas preguntas como quieras. Por lo tanto, haga clic en preguntar, luego haga otra pregunta, no la agregue al final de otra.
ctrl-alt-delor

Respuestas:

11

El findcomando eliminará cualquier archivo normal en o debajo del /home/_backups/pokebrawldirectorio que tenga más de siete días de antigüedad (o más precisamente, que no haya sido modificado en la última semana).

Probablemente debería leer

find "$DESDIR" -mtime +6 -type f -delete

o

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

ya que hay una variable perfectamente buena que ya contiene ese nombre de directorio. La segunda variación causaría un error si DESDIRpor alguna razón estuviera vacía o sin configurar.

Supongo que esta es una forma de mantener solo las copias de seguridad de la semana pasada. Sugeriría usar algo como borgbackupo en su resticlugar, ya que estos serían capaces de mantener las copias de seguridad durante mucho más tiempo sin usar mucho más espacio (incluso las copias de seguridad por hora durante un año no ocuparían mucho espacio si los datos no cambiaran mucho) . Realizan la deduplicación de datos y, borgbackupademás, admiten la compresión (ambos admiten copias de seguridad remotas y cifrado también).

Para ejecutar el script cada 24 horas (a medianoche), use un trabajo cron.

Primero, emita el comando crontab -e. Esto abriría un editor con el crontab actual para el usuario activo (esto puede o no ser un archivo vacío).

Luego añade

@daily /path/to/the/script.sh

(donde path/to/the/script.shestá el nombre de ruta del script).

Guarde y salga del editor.

El guión ahora se llamaría a medianoche, incluso a la noche.

¿Desea ejecutar el script a las 13:30 cada tarde, por ejemplo, agregue lo siguiente como la entrada crontab en su lugar:

30 13 * * * /path/to/the/script.sh

Consulte el manual de crontab en su sistema para obtener detalles sobre cómo escribir un cronograma crontab ( man 5 crontab).

Kusalananda
fuente
1
En el aspecto probablemente debería leer : he visto que algunos scripters evitan deliberadamente el uso de una variable de entorno al hacer este tipo de find/ deleteoperación, en caso de que algunos tontos se olviden de establecerlo $DESDIRo establecerlo en "/" o algo así por error.
Steve
@steve Bueno, si DESDIRse cambia y el findcomando no se actualiza, no se podría limpiar el directorio correcto. Posiblemente sería útil usar ${DESDIR:?Not set correctly}o algo similar en su lugar.
Kusalananda
5
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Esto encuentra todos los archivos en el directorio /home/_backups/pokebrawlque no se han modificado en los últimos +6días y los elimina. NOTA: +6equivale a 7 días.

Mire man findpara ver cómo funcionan estos interruptores:

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

En las distribuciones de Redhat, simplemente puede colocar este script en el directorio /etc/crondailyy se ejecutará todos los días. Puede ver que ya hay otros scripts que puede usar como ejemplos:

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate
slm
fuente