lunedì 30 dicembre 2019

Cancellare files dopo N giorni


Ho un problema con le conservazioni dei backup, dopo N giorni li voglio cancellare. Ma non a mano, ovvviamente. Ecco che soluzione ho trovato!


Uso al lavoro un software di gestione dei ticket e dell'inventario, fin qui nulla di strano.
Solo che ho due opportunità, o faccio il backup della macchina virtuale o faccio il backup del database.
Siccome sono paranoico, faccio entrambi i backup.

Ma Veeam mi permette di settare una retention policy (ovvero dopo quanti giorni cancellare i vecchi backup), mentre il software di ticketing no.
Stessa cosa per il software "stupidino" che uso per spostare i backup del database.

Dopo la terza volta che mi sono trovato una trentina di files di backup per 45gb in mezzo ai piedi, ho deciso di cercare una soluzione.

Alla fine, ho usato uno script bat con un comando già disponibile sotto windows, ovvero FORFILES.

La sintassi del comando è questa :

FORFILES [/p <Path>] [/m <SearchMask>] [/s] [/c “<Command>“] [/d [{+|-}][{<Date>|<Days>}]]

p = path
s = cerca anche nelle subdirectory del path principale
m = file con criteri specificati (esempio.: *.img); di default assume *.*
c = esegue il comando racchiuso tra apici doppi
d = ultima modifica più vecchia di (giorni/data)

Quello che a me serviva, quindi, si è concretizzato in questo comando :


forfiles /p "C:/Program Files/belzebub/backup" /s /m *.* /d -10 /c "cmd /c del @path"

Il tutto, "tradotto" in italiano è una roba simile a :
  • cerca nella cartella specificata dopo /p e nelle sottocartelle (usando lo switch /s)
  • i file che vanno cercati sono tutti ( perchè ho specificato *.*, anche se non era strettamente necessario)
  • i file devono essere più vecchi di 10 giorni (ho usato lo switch /d seguito dal numero 10)
  • i files devono essere cancellati ( perchè ho inserito lo switch /c seguito dal comando DEL seguito da @path per forzare il comando nella cartella specificata con /p)
Questo batch scemo lo faccio girare tutti i giorni ed ho risolto i miei problemi.
Ovvio, lo si può usare per cancellare i video di un sistema di videosorveglianza, i files temporanei, quello che si vuole.

Ho però scoperto che mettendolo nelle Operazioni Pianificate, mi viene restituito un errore all'avvio.

Dopo averci smanettato un paio di giorni, mi sono ricordato di un trucchetto che avevo messo in piedi qualche anno fa per riavviare degli access point con OpenWRT...

Siccome sotto windows non esiste il comando "touch" mi sono arrangiato :-)
Ho pensato che sarebbe stata una cosa carina tenere traccia di quando lo script partiva, quindi ho aggiunto un pochino di righe :

SET DSIST=%DATE%
SET ORA=%TIME%
SET NDATA=%DSIST:~6,4%%DSIST:~3,2%%DSIST:~0,2%_%ora:~0,2%%ora:~3,2%
echo %ndata% > %ndata%.txt

In breve, mi vado a prendere la data e l'ora del sistema e me le salvo come variabili chiamandole DSIST e ORA.
Mi creo una terza variabile e la chiamo NDATA "smanettando" un pochino sulle prime due.
Nello specifico  :

%DSIST:~6,4%
specifica che l'anno parte dal sesto carattere e termina dopo 4 caratteri

%DSIST:~3,2%
specifica che il mese parte dal terzo carattere e termina dopo 2 caratteri

DSIST:~0,2%
specifica che il giorno parte dal carattere 0 (ovvero il primo) e termina dopo 2 caratteri

Inserisce poi il segno "_"

%ora:~0,2%
specifica che l'ora parte dal carattere 0 (ovvero il primo) e termina dopo 2 caratteri

%ora:~3,2%
specifica che i minuti partono dal terzo carattere e terminano dopo 2 caratteri


Così ora il mio scriptino scemo è così :

SET DSIST=%DATE%
SET ORA=%TIME%
SET NDATA=%DSIST:~6,4%%DSIST:~3,2%%DSIST:~0,2%_%ora:~0,2%%ora:~3,2%
forfiles /p "C:/Program Files/belzebub/backup" /s /m *.* /d -10 /c "cmd /c del @path"
echo %ndata% > %ndata%.txt

Così mi crea un files con data ed ora come nome una volta che la cancellazione dei files più vecchi di 10 giorni ha girato.
E messo in Operazioni Pianificate gira senza problema alcuno :-)

Se vuoi leggere l'articolo sul riavvio degli access point, si chiama Il demone cron, OpenWrt e WinSCP per il reboot


Nessun commento:

Posta un commento

Sei davvero sicuro di voler sprecare tempo prezioso per scrivere qualcosa? Non è che preferisci andare su Google?

Cerca nel blog

I post più letti di sempre