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