Confuso da questo comando `find` in uno script Bash?


8

Ho uno script bash, creato da qualcuno che non è più in grado di spiegare il significato, che viene utilizzato per TARing automatico di una cartella e il backup. Al momento sono confuso con la linea finale:

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

Lo script completo è di seguito.

#!/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

3
Nessuna domanda di follow-up, una domanda per domanda. Puoi porre tutte le domande che vuoi. Quindi fai clic su fai domanda, quindi fai un'altra domanda, non aggiungerla in fondo a un'altra.
ctrl-alt-delor,

Risposte:


11

Il findcomando eliminerà qualsiasi file normale all'interno o al di sotto della /home/_backups/pokebrawldirectory che risale a più di sette giorni (o più precisamente, non modificato nell'ultima settimana).

Dovrebbe probabilmente leggere

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

o

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

poiché esiste già una variabile perfettamente valida con quel nome di directory. La seconda variazione provocherebbe un errore se DESDIRper qualche motivo fosse vuota o non impostata.

Suppongo che questo sia un modo per conservare solo i backup della scorsa settimana. Suggerirei di utilizzare qualcosa di simile borgbackupo resticinvece, poiché questi sarebbero in grado di mantenere i backup per molto più tempo senza utilizzare molto più spazio (anche i backup orari per un anno non occuperebbero molto spazio se i dati non cambiassero molto) . Eseguono la deduplicazione dei dati e borgbackupsupporta inoltre la compressione (entrambi supportano anche backup remoti e crittografia).

Per eseguire lo script ogni 24 ore (a mezzanotte), utilizzare un processo cron.

Innanzitutto, emettere il comando crontab -e. Questo aprirebbe un editor con l'attuale crontab per l'utente attivo (questo può essere o meno un file vuoto).

Quindi aggiungere

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

(dove si path/to/the/script.shtrova il percorso dello script).

Salva ed esci dall'editor.

La sceneggiatura verrebbe ora chiamata a mezzanotte, anche di notte.

Vorresti eseguire lo script alle 13:30 ogni pomeriggio, invece aggiungi quanto segue come voce crontab:

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

Consultare il manuale crontab sul proprio sistema per i dettagli su come scrivere una pianificazione crontab ( man 5 crontab).


1
Sul Dovrebbe probabilmente letto aspetto: Ho visto alcuni scripters deliberatamente evitano di utilizzare una variabile d'ambiente quando si fa questo tipo di find/ deleteoperazioni, nel caso in cui alcuni dimentica doofus per impostare $DESDIRo la porta "/" o somesuch per errore.
steve

@steve Bene, se DESDIRviene modificato e il findcomando non aggiornato, non riuscirà a ripulire la directory corretta. Sarebbe forse utile usare ${DESDIR:?Not set correctly}o qualcosa di simile invece.
Kusalananda

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

Questo trova tutti i file nella directory /home/_backups/pokebrawlche non sono stati modificati negli ultimi +6giorni e li elimina. NOTA: +6corrisponde a 7 giorni.

Guarda man findper vedere come funzionano questi switch:

$ 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.

Su Redhat distro puoi semplicemente mettere questo script nella directory /etc/crondailye verrà eseguito ogni giorno. Puoi vedere che ci sono già altri script che puoi usare come esempi:

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.