venerdì 24 gennaio 2014

Windows, controllo consistenza directory

Per lavoro mi occupo, tra l'altro, di muovere file che ricevo da partner esterni.
Spesso ricevo i file, devo lavorarli in qualche modo (crittografia, decrittografia, compressione, normalizzazione ...) e poi li devo girare ad altre entità.
Devo avere la certezza essi siano stati lavorati e ruotati, di seguito la mia organizzazione ed il mio script di controllo.
Di seguito la soluzione che ho adottato sulla piattaforma Microsoft.

Tutti i file ricevuti vengono messi in un unica cartella, dove poi sono presenti delle sottocartelle divise per argomenti, quindi tutto starà in C:\MiaDir\...
Ogni giorno lo schedulatore automatico del sistema operativo esegue il seguente script:

SET INPUTDIR=C:\MiaDir
SET TEMPDIR=C:\Batch\temp
SET LOG=ControllaDir.log
SET ECCEZIONI=C:\batch\bin\ControllaDirEccezioni.ini



:CONTROLLADIR
dir %INPUTDIR% /b /s /a:-d >%TEMPDIR%\%LOG%



:ELIMINAECCEZIONI
findstr /V /G:%ECCEZIONI% %LOGA% >%LOGB%

:INTESTATADATA   
echo . >>D:\%LOG%
echo ######################## %date% ############################################# >>D:\%LOG%



:NOFILE
for %%R in (%TEMPDIR%\%LOG%) do if %%~zR equ 0 (
    echo Non ci sono problemi da segnalare per oggi >>D:\%LOG%
    )
type %TEMPDIR%\%LOG% >>D:\%LOG%
  
:INVIAEMAIL  
blat D:\%LOG% -to casaprocida@mioserver.it



:FINE

Andiamo ad analizzare cosa fà lo script:
In testa mi segno le mie variabili, in modo qualsiasi modifica devo fare allo script mi basta farla lì. Memorizzo in:
  • INPUTIDIR il path origine dove devo cercare i file;
  • TEMPDIR un path di appoggio per scrivere una copia volatile del file di log;
  • LOG E' il nome file in cui vado a scrivere l'esito della ricerca;
  • ECCEZIONI E' un file in cui ho inserito tutte le directory o nomi file che se trovati consistenti non devono essere considerati nel file di log;
Il passo :CONTROLLADIR esegue la ricerca nella cartella indicata facendo in modo che:
  • /b non vengano visualizzate informazioni di riepilogo relative al file trovato;
  • /s cerca nella directory ed in tutte le sue sottodirectory;
  • /a:-d visualizza per il file solo l'attributo directory, in modo da mostrarci il path assoluto di esso;
Il passo ELIMINAECCEZIONI fa si che vengano evitati dei falsi positivi, ovvero, per esperienza so che se mi trovo determinati file non devo assolutamente preoccupami, li inserisco nel file ECCEZIONI ed il log di questo script sarà ripulito dai "falsi positivi". Logicamente più grande sarà il file ECCEZIONI più tempo impiegherà lo script ad essere eseguito, nel mio caso ho una settantina di record in esso e la durata è di una manciata di secondi. Il file ECCEZIONI dovrà riportare per ogni riga il path assoluto del file o il della directory da eliminare dalla ricerca.

Per mia abitudine preferisco avere un file contenente la storia di ciò che ho trovato, poi ogni tanto lo ripulisco a mano. Di conseguenza ho inserito il passo INTESTADATA che inserisce un marcatore che riposta il giorno in cui ha girato lo script.

Per mia abitudine preferisco avere una segnalazione anche se non ci sono movimenti da segnalare, ciò mi da la conferma che lo script ha girato correttamente, una sorta del controllo sul controllo, quindi ho inserito il passo NOFILE in cui scrivo nel file do non avere trovato nulla di anomalo.

La segnalazione la invio via email, per far ciò utilizzo il buon vecchio blat; è piccolo, opensource e nella sua semplicità fa il suo lavoro correttamente, ciò non toglie che si potrebbero usare chissà quanti altri metodi per inviare email o eseguire segnalazioni.

Lo script gira in automatico tutte le mattine, poco prima che io entro al lavoro, appena arrivo controllo le email, guardo il file di log che mi è arrivato ... e mi risparmio un sacco di tempo nell'effettuare i controlli manualmente, mi rimane il tempo per prendermi il caffè tranquillamente, se non ho riscontrato anomalie.