Ajouter collecte_final.sh
première version
This commit is contained in:
parent
7ec7fd1889
commit
ac4ad215ed
1 changed files with 153 additions and 0 deletions
153
collecte_final.sh
Normal file
153
collecte_final.sh
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
#!/bin/bash
|
||||
# collecte_final.sh - Version finale avec MD5 + espaces + compteur
|
||||
|
||||
NEXTCLOUD_DATA="/var/www/html/nextcloud/data"
|
||||
PROF_USERNAME="profsnt"
|
||||
DATE=$(date +%Y-%m-%d_%H-%M)
|
||||
CSV_FILE="${1:-eleves_test.csv}"
|
||||
|
||||
echo "🔄 Collecte SNT finale (MD5 + versions + espaces) - $(date)"
|
||||
|
||||
total_collectes=0
|
||||
|
||||
# Rescan élèves
|
||||
echo "🔍 Rescan de tous les élèves..."
|
||||
while IFS=',' read -r classe nom prenom email motdepasse; do
|
||||
[[ "$classe" = "Classe" ]] && continue
|
||||
username="${prenom,,}.${nom,,}"
|
||||
sudo -u www-data php /var/www/html/nextcloud/occ files:scan "$username" > /dev/null 2>&1
|
||||
done < "$CSV_FILE"
|
||||
|
||||
echo "✅ Rescan terminé"
|
||||
echo "📋 Collecte des fichiers (30 dernières minutes)..."
|
||||
|
||||
while IFS=',' read -r classe nom prenom email motdepasse; do
|
||||
[[ "$classe" = "Classe" ]] && continue
|
||||
|
||||
username="${prenom,,}.${nom,,}"
|
||||
eleve_snt_dir="$NEXTCLOUD_DATA/$username/files/SNT"
|
||||
prof_rendus_dir="$NEXTCLOUD_DATA/$PROF_USERNAME/files/Classes_SNT/$classe/Rendus"
|
||||
|
||||
[[ ! -d "$eleve_snt_dir" ]] && continue
|
||||
|
||||
compteur_eleve=0
|
||||
|
||||
# GESTION CORRECTE DES ESPACES avec find -print0
|
||||
find "$eleve_snt_dir" \( -name "*.docx" -o -name "*.txt" \) -mmin -30 -type f -print0 | \
|
||||
while IFS= read -r -d '' fichier; do
|
||||
|
||||
# Extraire la structure
|
||||
chemin_relatif="${fichier#$eleve_snt_dir/}"
|
||||
sequence=$(echo "$chemin_relatif" | cut -d'/' -f1)
|
||||
activite=$(echo "$chemin_relatif" | cut -d'/' -f2)
|
||||
nom_fichier=$(basename "$fichier")
|
||||
|
||||
# Nettoyer le nom : enlever versions
|
||||
nom_base_clean=$(echo "$nom_fichier" | sed -E 's/[_\-\ ]?v[0-9]+(\.[^.]*)?$/\1/' | sed 's/\.[^.]*$//')
|
||||
extension=$(echo "$nom_fichier" | sed 's/.*\.//')
|
||||
|
||||
if [[ "$nom_base_clean" == "" ]]; then
|
||||
nom_base_clean=$(echo "$nom_fichier" | sed 's/\.[^.]*$//')
|
||||
fi
|
||||
|
||||
# Créer structure dans Rendus
|
||||
dest_dir="$prof_rendus_dir/$sequence/$activite"
|
||||
mkdir -p "$dest_dir"
|
||||
|
||||
# HISTORIQUE : Trouver la prochaine version - CORRECTION ESPACES
|
||||
derniere_version=0
|
||||
|
||||
# DEBUG : Afficher le pattern de recherche
|
||||
echo " 🔍 Recherche pattern : ${username}_${nom_base_clean}_v*.${extension}"
|
||||
|
||||
# Méthode robuste avec find au lieu de glob
|
||||
while IFS= read -r -d '' fichier_existant; do
|
||||
if [[ -f "$fichier_existant" ]]; then
|
||||
echo " 📄 Trouvé : $(basename "$fichier_existant")"
|
||||
num_version=$(basename "$fichier_existant" | grep -o '_v[0-9]*' | sed 's/_v//')
|
||||
echo " 🔢 Version extraite : $num_version"
|
||||
if [[ -n "$num_version" && $num_version -gt $derniere_version ]]; then
|
||||
derniere_version=$num_version
|
||||
fi
|
||||
fi
|
||||
done < <(find "$dest_dir" -name "${username}_${nom_base_clean}_v*.${extension}" -print0 2>/dev/null)
|
||||
|
||||
# Détection version élève
|
||||
if [[ "$nom_fichier" =~ _v([0-9]+) ]] || [[ "$nom_fichier" =~ [\ \-]v([0-9]+) ]]; then
|
||||
version_eleve="${BASH_REMATCH[1]}"
|
||||
echo " 📌 Élève version ${version_eleve} : $username/$sequence/$activite/$nom_fichier"
|
||||
else
|
||||
echo " 📄 Sans version : $username/$sequence/$activite/$nom_fichier"
|
||||
fi
|
||||
|
||||
# Nouvelle version pour l'historique
|
||||
nouvelle_version=$((derniere_version + 1))
|
||||
dest_file="$dest_dir/${username}_${nom_base_clean}_v${nouvelle_version}.${extension}"
|
||||
|
||||
echo " 🔢 Collecté comme version ${nouvelle_version} : ${nom_base_clean}_v${nouvelle_version}.${extension}"
|
||||
|
||||
echo " 🎯 Dernière version trouvée : $derniere_version"
|
||||
|
||||
# TEST MD5 ANTI-DOUBLON
|
||||
should_collect=true
|
||||
|
||||
if [[ $derniere_version -gt 0 ]]; then
|
||||
fichier_precedent="$dest_dir/${username}_${nom_base_clean}_v${derniere_version}.${extension}"
|
||||
if [[ -f "$fichier_precedent" ]]; then
|
||||
md5_source=$(md5sum "$fichier" | cut -d' ' -f1)
|
||||
md5_precedent=$(md5sum "$fichier_precedent" | cut -d' ' -f1)
|
||||
|
||||
echo " 🔍 Test MD5 : source=$md5_source vs precedent=$md5_precedent"
|
||||
|
||||
if [[ "$md5_source" == "$md5_precedent" ]]; then
|
||||
should_collect=false
|
||||
echo " ↔️ Identique à v${derniere_version} : pas de nouvelle version"
|
||||
else
|
||||
echo " 🆕 Différent de v${derniere_version} : collecte justifiée"
|
||||
fi
|
||||
else
|
||||
echo " 📄 Pas de version précédente trouvée"
|
||||
fi
|
||||
else
|
||||
echo " 🎯 Premier fichier pour cet élève"
|
||||
fi
|
||||
|
||||
# COLLECTE
|
||||
if [[ "$should_collect" == "true" ]]; then
|
||||
cp "$fichier" "$dest_file"
|
||||
echo " ✅ Collecté : $username/$sequence/$activite/$(basename "$dest_file")"
|
||||
|
||||
# COMPTEUR via fichier temporaire global
|
||||
echo "1" >> "/tmp/collecte_count_$$"
|
||||
|
||||
# Compteur élève via fichier temporaire local
|
||||
echo "1" >> "/tmp/collecte_eleve_${username}_$$"
|
||||
fi
|
||||
done
|
||||
|
||||
# Compter pour cet élève
|
||||
if [[ -f "/tmp/collecte_eleve_${username}_$$" ]]; then
|
||||
compteur_eleve=$(wc -l < "/tmp/collecte_eleve_${username}_$$")
|
||||
rm -f "/tmp/collecte_eleve_${username}_$$"
|
||||
fi
|
||||
|
||||
[[ $compteur_eleve -gt 0 ]] && echo "📄 $compteur_eleve fichier(s) collecté(s) pour $username ($classe)"
|
||||
|
||||
done < "$CSV_FILE"
|
||||
|
||||
# Compter le total
|
||||
if [[ -f "/tmp/collecte_count_$$" ]]; then
|
||||
total_collectes=$(wc -l < "/tmp/collecte_count_$$")
|
||||
rm -f "/tmp/collecte_count_$$"
|
||||
fi
|
||||
|
||||
# Permissions et rescan final
|
||||
echo "🔧 Application des permissions..."
|
||||
chown -R www-data:www-data "$NEXTCLOUD_DATA/$PROF_USERNAME/files/Classes_SNT"
|
||||
|
||||
echo "🔄 Rescan des fichiers prof..."
|
||||
sudo -u www-data php /var/www/html/nextcloud/occ files:scan "$PROF_USERNAME" > /dev/null 2>&1
|
||||
|
||||
echo ""
|
||||
echo "✅ Collecte finale terminée - $(date)"
|
||||
echo "📊 Résumé: $total_collectes fichier(s) collecté(s) au total"
|
||||
Loading…
Add table
Add a link
Reference in a new issue