Répondre à la discussion

Bon j'ai mis le mode Python sur ChatGPT, et il me l'a trouvé du premier coup, contrairement à ChatGPT classique, et ça fonctionne du feu de dieu !

[CODE]#!/bin/bash


# Chemins des dossiers où sont enregistrées les vidéos

source_folders=(

"/Users/gregoryen/Scripts/TEST/SOURCE"

)


# Dossier de base à partir duquel tu veux rechercher les sous-dossiers

base_folder="/Users/gregoryen/Scripts/TEST/DESTINATION"


# Taille minimale autorisée en Mo

min_size_mb=10


# Fonction pour générer le nouveau nom du fichier

generate_new_filename() {

    local date_part="$1"

    local destination_folder="$2"

    local counter=1

    local new_filename=""


    while true; do

        new_filename="${date_part}-[${counter}].mp4"

        if [ ! -e "${destination_folder}/${new_filename}" ]; then

            break

        fi

        ((counter++))

    done


    echo "$new_filename"

}


# Fonction pour vérifier si le fichier est en cours de création

is_file_still_writing() {

    local file="$1"

    local initial_size=$(du -m "$file" | cut -f1)

    sleep 5  # Attendre 5 secondes

    local new_size=$(du -m "$file" | cut -f1)


    # Vérifie si la taille a changé

    if [ "$initial_size" -ne "$new_size" ]; then

        return 0  # Le fichier est encore en cours d'écriture

    else

        return 1  # Le fichier est prêt à être déplacé

    fi

}


# Fonction pour ajuster la date si l'heure est entre 00:00 et 05:00

adjust_date_if_needed() {

    local date_part="$1"

    local time_part="$2"

    local adjusted_date="$date_part"


    # Vérifier si l'heure est entre minuit et 5 heures du matin

    if [[ "$time_part" < "05:00:00" ]]; then

        # Ajuster la date à la veille

        adjusted_date=$(date -j -f "%d-%m-%Y" -v-1d "$date_part" "+%d-%m-%Y")

    fi


    echo "$adjusted_date"

}


# Parcours des dossiers sources

for source_folder in "${source_folders[@]}"; do

    # Vérifier si des fichiers MP4 existent dans le dossier source

    if [ -n "$(ls -A "$source_folder"/*.mp4 2>/dev/null)" ]; then

        # Parcours des fichiers MP4 dans le dossier source

        for video_file in "$source_folder"/*.mp4; do

            # Vérifier la taille du fichier

            file_size=$(du -m "$video_file" | cut -f1)


            # Vérifier si le nom du fichier contient "Replay"

            if [[ "$video_file" == *"Replay"* ]]; then

                echo "Le fichier $video_file contient 'Replay' et sera ignoré."

                continue

            fi

         

            if [ "$file_size" -ge "$min_size_mb" ]; then

                # Extraire la date et l'heure du nom du fichier

                file_name=$(basename "$video_file")

                date_part=$(echo "$file_name" | grep -oE '[0-9]{2}-[0-9]{2}-[0-9]{4}' | head -n1)

                time_part=$(echo "$file_name" | grep -oE '[0-9]{2}-[0-9]{2}-[0-9]{2}' | tail -n1 | tr '-' ':')


                if [ -n "$date_part" ] && [ -n "$time_part" ]; then

                    # Ajuster la date si l'heure est entre minuit et 5 heures

                    adjusted_date_part=$(adjust_date_if_needed "$date_part" "$time_part")


                    # Recherche du dossier correspondant dans la structure à partir du dossier de base

                    destination_subfolder=$(find "$base_folder" -type d -name "*$adjusted_date_part*" | head -n 1)


                    if [ -n "$destination_subfolder" ]; then

                        # Chemin du sous-dossier « Découpage par tranche de 2 heures »

                        final_destination="${destination_subfolder}/Découpage par tranche de 2 heures"


                        # Créer le sous-dossier s'il n'existe pas

                        if [ ! -d "$final_destination" ]; then

                            mkdir -p "$final_destination"

                            echo "Sous-dossier créé : $final_destination"

                        fi


                        # Attendre 30 secondes avant de vérifier le fichier

                        echo "Attente de 30 secondes avant de vérifier $video_file."

                        sleep 30


                        # Vérifier si le fichier est encore en cours d'écriture

                        if is_file_still_writing "$video_file"; then

                            echo "Le fichier $video_file est encore en cours de création, il ne sera pas déplacé."

                            continue

                        fi


                        # Vérifier à nouveau la taille du fichier avant de le déplacer

                        file_size=$(du -m "$video_file" | cut -f1)


                        if [ "$file_size" -ge "$min_size_mb" ]; then

                            # Générer le nouveau nom du fichier

                            new_filename=$(generate_new_filename "$adjusted_date_part" "$final_destination")


                            # Déplacer le fichier MP4 avec le nouveau nom dans le sous-dossier

                            mv "$video_file" "${final_destination}/${new_filename}"

                            echo "Le fichier $file_name a été déplacé vers ${final_destination}/${new_filename}."

                        else

                            echo "Le fichier $video_file est inférieur à ${min_size_mb} Mo après vérification et ne sera pas déplacé."

                        fi

                    else

                        echo "Aucun dossier correspondant à la date $adjusted_date_part n'a été trouvé dans la structure de dossiers."

                    fi

                else

                    echo "La date ou l'heure n'a pas pu être extraite du fichier $file_name."

                fi

            else

                echo "Le fichier $video_file est inférieur à ${min_size_mb} Mo et ne sera pas déplacé."

            fi

        done

    else

        echo "Aucun fichier MP4 trouvé dans le dossier $source_folder."

    fi

done[/CODE]