85 lines
2.9 KiB
Bash
Executable File
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/"
|