Files

85 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Pulisce i dati: svuota la cartella di output e cancella i CSV in input/ (con --solo-output lascia input/ com'è).
set -euo pipefail
cd "$(dirname "$0")"
uso() {
cat <<'E'
uso: ./pulisci.sh [-n] [-y] [--solo-output]
Cancella i dati:
- il contenuto della cartella di output ([output] cartella_output in config.toml, default "output"):
risultati generati da `fitseg`, si rifanno rilanciando l'analisi. La cartella resta;
- i file *.csv in input/: i dati grezzi, NON si rifanno da soli (vanno rigenerati con extern/gen_data
(./scarica_gen_data.sh), vedi docs/uso.md §2). La cartella e il suo .gitkeep restano.
Chiede conferma prima di cancellare, salvo -y.
opzioni:
--solo-output pulisce solo l'output, lascia input/ com'è
-n, --dry-run mostra cosa verrebbe cancellato senza cancellare
-y, --si non chiede conferma
-h, --help mostra questo aiuto
esempi:
./pulisci.sh svuota output/ e input/*.csv (con conferma)
./pulisci.sh -n mostra cosa cancellerebbe, senza cancellare
./pulisci.sh --solo-output svuota solo output/
./pulisci.sh -y svuota tutto senza chiedere
E
}
input=1 secco=0 si=0
for a in "$@"; do
case "$a" in
--solo-output) input=0 ;;
-n|--dry-run) secco=1 ;;
-y|--si) si=1 ;;
-h|--help) uso; exit 0 ;;
*) echo "pulisci.sh: opzione non riconosciuta: $a" >&2; uso >&2; exit 2 ;;
esac
done
# cartella di output da config.toml (chiave cartella_output), altrimenti "output"
out=$(sed -n 's/^cartella_output[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' config.toml 2>/dev/null | head -n1)
out=${out:-output}
# sicurezza: solo percorsi relativi dentro il repository
case "$out" in
""|/*|.|..|*..*) echo "pulisci.sh: cartella di output non sicura: '$out'" >&2; exit 1 ;;
esac
# file da cancellare: contenuto di output/ (tranne un eventuale .gitkeep) e input/*.csv (salvo --solo-output)
elenco=()
if [ -d "$out" ]; then
while IFS= read -r -d '' f; do elenco+=("$f"); done < <(find "$out" -mindepth 1 -maxdepth 1 ! -name .gitkeep -print0)
fi
csv=()
if [ "$input" -eq 1 ] && [ -d input ]; then
while IFS= read -r -d '' f; do csv+=("$f"); done < <(find input -maxdepth 1 -type f -name '*.csv' -print0)
fi
if [ ${#elenco[@]} -eq 0 ] && [ ${#csv[@]} -eq 0 ]; then
echo "niente da pulire"
exit 0
fi
echo "da cancellare:"
for f in "${elenco[@]}" "${csv[@]}"; do echo " $f"; done
if [ "$secco" -eq 1 ]; then
echo "(dry-run: nessun file cancellato)"
exit 0
fi
if [ "$si" -eq 0 ]; then
[ ${#csv[@]} -gt 0 ] && echo "ATTENZIONE: i CSV in input/ sono i dati grezzi e non si rigenerano da soli."
read -r -p "procedere? [s/N] " risposta
case "$risposta" in s|S|si|SI|sì) ;; *) echo "annullato"; exit 1 ;; esac
fi
[ ${#elenco[@]} -gt 0 ] && rm -rf -- "${elenco[@]}"
[ ${#csv[@]} -gt 0 ] && rm -f -- "${csv[@]}"
echo "pulito: ${#elenco[@]} elementi in $out/, ${#csv[@]} CSV in input/"