#!/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/"