Skip to content

Instantly share code, notes, and snippets.

@soyuka
Created April 25, 2025 14:40
Show Gist options
  • Save soyuka/778bdb7c4e265ff7862602ea3479ba21 to your computer and use it in GitHub Desktop.
Save soyuka/778bdb7c4e265ff7862602ea3479ba21 to your computer and use it in GitHub Desktop.
Remove comments of a PHP script from quagga
#!/bin/bash
# attention script completement généré par Gemini, testé et marche pour mon usage mais ne vous fiez pas non plus aveuglement a ce code
# quagga --output prompt.txt --include '*.php' --exclude Tests/ . --max-total-size=600000
# Script pour supprimer tous les commentaires (blocs et lignes),
# ainsi que les lignes vides des fichiers 'prompt.txt.NNN'
# et concaténer le résultat dans un seul fichier.
# Nom du fichier de sortie
output_file="concatenated_prompt.php"
# Modèle pour les fichiers d'entrée (regex POSIX étendue pour find)
input_regex_pattern='.*/prompt\.txt\.[0-9]+$'
# Modèle glob pour message d'erreur
input_glob_pattern="prompt.txt.*"
# Vérifier si Perl est installé (nécessaire pour les commentaires multi-lignes)
if ! command -v perl &> /dev/null; then
echo "Erreur : La commande 'perl' est introuvable. Veuillez installer Perl." >&2
exit 1
fi
# Trouver les fichiers correspondants et les trier
# Utilisation de 'find' pour plus de robustesse et 'sort -V' pour un tri numérique naturel
# -maxdepth 1 pour ne chercher que dans le répertoire courant
mapfile -d $'\0' files < <(find . -maxdepth 1 -type f -regextype posix-extended -regex "$input_regex_pattern" -print0 | sort -zV)
# Vérifier si des fichiers ont été trouvés
if [ ${#files[@]} -eq 0 ]; then
echo "Aucun fichier trouvé correspondant au modèle '$input_glob_pattern' dans le répertoire courant." >&2
exit 1
fi
echo "Fichiers à traiter trouvés (${#files[@]}):"
# Boucle pour afficher correctement les noms de fichiers trouvés par mapfile
for (( i=0; i<${#files[@]}; i++ )); do
# Retirer le préfixe './' éventuel pour un affichage plus propre
printf " - %s\n" "${files[$i]#./}"
done
# Vider ou créer le fichier de sortie
> "$output_file"
echo "Le résultat sera enregistré dans : $output_file"
# Traiter chaque fichier
file_count=0
error_occurred=0
for file_path in "${files[@]}"; do
# Utiliser le chemin relatif pour l'affichage
file_rel="${file_path#./}"
echo "Traitement de $file_rel..."
# Pipeline de commandes pour traiter le fichier
processed_content=$(<"$file_path" perl -0777 -pe 's#/\*.*?\*/##sg' | \
sed -e 's@//.*@@' -e 's@#.*@@' | \
sed '/^[[:space:]]*$/d')
# Vérifier le code de sortie de la dernière commande sed (la plus susceptible d'échouer si la syntaxe est mauvaise)
# Note: La vérification après l'assignation via $(...) vérifie la commande `sed` finale.
if [ $? -ne 0 ]; then
echo "Erreur lors du traitement (sed) du fichier $file_rel" >&2
error_occurred=1
else
# Ajouter le contenu traité au fichier de sortie
echo "$processed_content" >> "$output_file"
file_count=$((file_count + 1))
fi
done
echo "-------------------------------------"
if [ $error_occurred -ne 0 ]; then
echo "Traitement terminé avec des erreurs." >&2
else
echo "Traitement terminé avec succès."
fi
echo "$file_count fichiers ont été traités et combinés dans '$output_file'."
echo "Note: La suppression des commentaires avec '//' ou '#' peut affecter les URLs ou les chaînes contenant ces séquences."
# Retourner un code d'erreur si un problème est survenu
exit $error_occurred
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment