From 512d15f4c8bf3cb9f3250aa89b565ce86d8d5607 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Thu, 29 Oct 2026 11:54:09 +0100 Subject: [PATCH] Aggiunge pulisci.sh per svuotare output/ e input/*.csv Co-Authored-By: Claude Sonnet 5.5 --- pulisci.sh | 84 +++++++++++++++++++++ tests/{test_integrazione.py => test_cli.py} | 0 2 files changed, 84 insertions(+) create mode 100755 pulisci.sh rename tests/{test_integrazione.py => test_cli.py} (100%) diff --git a/pulisci.sh b/pulisci.sh new file mode 100755 index 0000000..d3717cd --- /dev/null +++ b/pulisci.sh @@ -0,0 +1,84 @@ +#!/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 ../gen_data, + 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/" diff --git a/tests/test_integrazione.py b/tests/test_cli.py similarity index 100% rename from tests/test_integrazione.py rename to tests/test_cli.py