Mi è capitato di dover predisporre l’archiviazione di una serie di file di testo su un server Linux, che un’applicazione scrive più volte al giorno in una data cartella, ma di doverli archiviare per il mese precedente, ovviamente riferendosi al mese in cui viene eseguita l’operazione, lasciando così consultabili solo quelli del mese corrente.
Per fare un esempio su cui lavorare, i file potrebbero essere in questo formato: YYYY-MM-DD-HH-mm.txt, il classico formato anno-mese-giorno-ora-minuti.
Ho trovato una soluzione molto semplice definendo una variabile, grazie alle molteplici possibilità del comando date (un classico man date per i dettagli), che mi individui tutti i files del mese precedente:
set MESESCORSO=`date -d "last month" '+%Y-%m-*.txt'`
Sempre grazie a date, definisco il formato del file compresso del mese precedente, nel formato YYYY-MM.zip (io ho preferito usare zip, ma è possibile usare il sistema di compressione che si preferisce):
set ARCHIVIOMESESCORSO=`date -d "last month" '+%Y-%m.zip'`
A questo punto mi rimane solo da definire, per comodità, il percorso sul server dove posizionare gli archivi mensili compressi:
set ARCHIVIMENSILI=/percorso/archivio/
Completano la sequenza i semplici comandi mv e rm per spostare gli archivi creati e cancellare i file originali.
Il tutto, alla fine, diventa uno script che assomiglia a questo (le righe che iniziano con # sono dei commenti):
#!/bin/tcsh
# DEFINISCO LE VARIABILI
set MESESCORSO=`date -d “last month” ‘+%Y-%m-*.ltxt’`
set ARCHIVIOMESESCORSO=`date -d “last month” ‘+%Y-%m.zip’`
set ARCHIVIMENSILI=/percorso/archivio/
# MI POSIZIONO NELLA CARTELLA DOVE CI SONO I FILE DA TRATTARE
cd /percorso/dei/file/da/archiviare
# ESEGUO INDIVIDUAZIONE E COMPRESSIONE ARCHIVIO MESE PRECEDENTE
zip $ARCHIVIOMESESCORSO $MESESCORSO
mv $ARCHIVIOMESESCORSO $ARCHIVIMENSILI
rm -vf $MESESCORSO
Il tutto inserito in un bel crontab che lo lancia il primo giorno di ogni mese
Ovviamente si tratta solo di un esempio, (molto) migliorabile con raggruppamenti di comandi e controlli sull’esecuzione corretta delle operazioni, ma a me è servito come base di partenza.
Anzi, se avete suggerimenti da dare sono particolarmente graditi… 😉
Una risposta