#! /bin/bash # # NE 1.0 # Newsgroups extractor # # Coded by Mickael # 05/03/2009 #################################################### # CONFIGURATION #################################################### # Emplacement du fichier de Log LOGFILE='/var/log/ns_extractor.log' # Format date FORMATDATE='%d/%m/%Y-%T'; # Codes erreurs CODEOK=0 CODEWARN=1 CODEERR=3 #################################################### #################################################### # DEFINITIONS DES VARIABLES #################################################### # Recuperation des arguments DIRECTORY=$PWD FILE=$1 DIRECTORYFILE=$1 # Suffixe et filename detection SUFFIXE=`expr match "$FILE" ".*\.\(.*\)$"` FILENAME=`expr match "$FILE" "\(.*\)\..*$"` FILENAME_DOUBLE_EXT=`expr match "$FILE" "\(.*\)\..*\..*$"` # Traitement des espaces DIRECTORYFILE="${DIRECTORYFILE//[[:space:]]/\\ }" FILENAMESLASH="${FILENAME//[[:space:]]/\\ }" #################################################### #################################################### # DEFINITION DES OUTILS NECESSAIRES #################################################### #################################################### #################################################### # DEFINITION DES OUTILS NECESSAIRES #################################################### # Test de recuperation du nom de l archive # Possibilite de FILE.part01.rar / FILE.part001.rar / FILE.rar # Il existe des mauvais uploader qui envoi leurs fichiers part2 avec une double extensions # du type : FILE.part.part2 donc obligation de checker egalement en enlevant les 2 extensions # ce qui fait FILE ensuite. detectFileName() { # Instanciation des variables DETECTED=0 REAL_FILE='' for FILE_DETECT in "$@" do if [ $DETECTED -ne 1 ] then if [ -r "$DIRECTORY/$FILE_DETECT.part01.rar" ] then DETECTED=1 REAL_FILE="$FILE_DETECT.part01.rar" FILE_TO_DELETE="$FILE_DETECT" else if [ -e "$DIRECTORY/$FILE_DETECT.part001.rar" ] then DETECTED=1 REAL_FILE="$FILE_DETECT.part001.rar" FILE_TO_DELETE="$FILE_DETECT" else if [ -r "$DIRECTORY/$FILE_DETECT.rar" ] then DETECTED=1 REAL_FILE="$FILE_DETECT.rar" FILE_TO_DELETE="$FILE_DETECT" fi fi fi fi done if [ $DETECTED -eq 1 ] then # Log echo "`date +$FORMATDATE` Archive cible est $REAL_FILE [OK]" >> $LOGFILE else # Ultime chance # Verification qu il y a un seul fichier .rar dans le dossier NBRARFILE=find "$DIRECTORY" -name "*.rar" -type f -maxdepth 1 | wc -l if [ $NBRARFILE -eq 1 ] then # Detected a 1 DETECTED=1 # Recuperation du nom de l archive REAL_FILE=find "$DIRECTORY" -name "*.rar" -type f -maxdepth 1 | cut -d'/' -f 2 # Nom de fichier sans l extension .rar FILE_TO_DELETE=`expr match "$FILE" "\(.*\)\..*$"` # Log echo "`date +$FORMATDATE` Il existe 1 fichier rar $REAL_FILE [OK]" >> $LOGFILE else # Log echo "`date +$FORMATDATE` Recuperation du nom de l archive impossible [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Récupération du nom de l archive impossible" fi fi } ################################################### # Preparation du Log echo -e "\n----------------------------------------------------">> $LOGFILE # Log echo "`date +$FORMATDATE` Traitement du fichier $FILE" >> $LOGFILE # Si le suffixe est egal a part2 if [ "$SUFFIXE" = 'par2' ] then # Detection si il existe un fichier FILE.001 if [ -e "$DIRECTORY/$FILENAME.001" ] then # Le traitement est le celui-ci # 1 - Concatenation des fichiers 001 a XXX # 2 - Verification/Reparation # 3 - Suppresions des fichiers archives # Concatenation des fichiers cat $DIRECTORY/"$FILENAME".* > $DIRECTORY/"$FILENAME" RETURN_CAT=$? # Si le code retour est 0 if [ $RETURN_CAT -eq $CODEOK ] then # Verification a l aide de pair2repair par2repair "$FILE" RETURN_PAR=$? # Si le par2repair s est bien deroule if [ "$RETURN_PAR" -eq "$CODEOK" ] then echo "`date +$FORMATDATE` PAR2REPAIR [OK]" >> $LOGFILE # Suppression des fichiers archives find "$DIRECTORY" -name "$FILENAME.*" -type f -maxdepth 1 -exec rm '{}' \; RETURN_RM=$? # Si le code retour est CODEOK ou CODEWARN if [ "$RETURN_RM" -eq "$CODEOK" ] then # Suppression des fichiers OK echo "`date +$FORMATDATE` SUPPRESSION des fichiers [OK]" >> $LOGFILE # Icone de notification lors de la reussite du traitement complet zenity --notification --window-icon="info" --text="Traitement de $FILENAME reussi" else # Suppression des fichiers FAILED echo "`date +$FORMATDATE` SUPPRESSION des fichiers [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Problème lors de la suppression des fichiers archives" fi else # le par2repair n est pas possible echo "`date +$FORMATDATE` PAR2REPAIR Impossible sur $FILE [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="PAR2REPAIR Impossible sur $FILE" fi else # Echec lors de la concatenation echo "`date +$FORMATDATE` CONCATENATION des fichiers [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Problème lors de la concatenation des fichiers" fi else # Le traitement est le celui-ci # 1 - Verification/Reparation # 2 - Extraction dans extract/ du repertoire de travail # 3 - Suppression des fichiers archives # Traitement du QuickPart par2repair "$FILE" RETURN_PAR=$? # Si le par2repair s est bien deroule if [ "$RETURN_PAR" -eq "$CODEOK" ] then echo "`date +$FORMATDATE` PAR2REPAIR [OK]" >> $LOGFILE # Detection du nom de l archive detectFileName "$FILENAME" "$FILENAME_DOUBLE_EXT" # Si la detection de l archive est correcte if [ "$DETECTED" -eq 1 ] then # Rajout des antislashs #REAL_FILE="${REAL_FILE//[[:space:]]/\\ }" #FILE_TO_DELETE="${FILE_TO_DELETE//[[:space:]]/\\ }" # Log echo "`date +$FORMATDATE` EXTRACTION de $REAL_FILE [OK]" >> $LOGFILE # Extraction de l archive unrar x "$DIRECTORY/$REAL_FILE" "$DIRECTORY/extract/" RETURN_EXTRACT=$? # Si l extraction s est bien deroule if [ "$RETURN_EXTRACT" -eq "$CODEOK" ] then echo "`date +$FORMATDATE` EXTRACTION dans $DIRECTORY/extract/ [OK]" >> $LOGFILE echo "`date +$FORMATDATE` SUPPRESSION des fichiers $DIRECTORY/$FILE_TO_DELETE*" >> $LOGFILE # Suppression des rar et nzb de l archive find "$DIRECTORY" -name "$FILE_TO_DELETE*" -type f -maxdepth 1 -exec rm '{}' \; RETURN_RM=$? # Si le code retour est CODEOK ou CODEWARN if [ "$RETURN_RM" -eq "$CODEOK" ] then # Suppression des fichiers OK echo "`date +$FORMATDATE` SUPPRESSION des fichiers [OK]" >> $LOGFILE # Icone de notification lors de la reussite du traitement complet zenity --notification --window-icon="info" --text="Traitement de $FILE_TO_DELETE reussi" else # Suppression des fichiers FAILED echo "`date +$FORMATDATE` SUPPRESSION des fichiers [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Problème lors de la suppression des fichiers archives" fi else # Erreur lors de l extraction echo "`date +$FORMATDATE` EXTRACTION dans $DIRECTORY/extract/ [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Erreur lors de l'extraction de $REAL_FILE" fi fi else # le par2repair n est pas possible echo "`date +$FORMATDATE` PAR2REPAIR Impossible sur $FILE [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="PAR2REPAIR Impossible sur $FILE" fi fi else # Fichier non gere echo "`date +$FORMATDATE` Fichier $FILE non reconnu [FAILED]" >> $LOGFILE # Affichage boite de dialogue erreur zenity --error --title "Erreur NS Extractor" --text="Fichier $FILE non reconnu par NS Extractor" fi # Fin du Log echo -e "\n----------------------------------------------------">> $LOGFILE