Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/05/2024, à 12:47

Neelix

[Résolu] Exclure tous les fichiers portant une extension particulère

Bonjour,

J'ai amélioré le script pour lequel nany m'a dépanné dans mon précédent post.

J'aimerai maintenant pouvoir exclure du traitement tous les fichiers "nomDeLaRom.p2k.cfg" crées automatiquement par Batocera. Jusque là, j'étais parvenu à exclure les fichiers filelist et _info de fichier de sortie. Comment puis-je faire de même avec les fichiers en question.

Voici mon nouveau script :

#!/bin/bash
         
location="$PWD"
logFile="$(basename $location)"
                     
if test -f "$logFile" ; then  #On vérifie si le fichier de sortie existe
    rm "$logFile"  #Si le fichier existe, on le supprime
fi

declare -a imgType=( bezel fanart image marquee thumb )  #On crée un tableau contenant les différents types d'images

echo -e "[IMAGES] \n" >> $logFile  #On insère une section dans le fichier de sortie

for romFile in *.* ; do  #On extrait les fichiers du répertoire de ROMS
    if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt -o "$romFile" = "$cfgName" -o "$romFile" = "*.cfg" ] ; then  #On exclut les fichiers gamelist, et tous les
        continue                                                                                                          #fichiers cfg présents dans le répertoire de roms
    else
        romName=${romFile%.*}  #On supprime l'extension du fichier de ROM
        for type in "${imgType[@]}" ; do  #On passe en revue les types d'images
            for imgFile in ./images/"${romName}"-"$type".* ; do   #On extrait les fichers d'images du répertoire d'images
                if test ! -f "$imgFile" ; then  #On vérifie que chaque fichier correpondant à la ROM existe
                    echo "$romFile" - "${type^^}" >> "$logFile"  #Si un fichier image manque, on le consigne dans le fichier de sortiex
                fi
            done
        done
    fi
done

#On reprends les mêmes actions que précédement pour les manuels des jeux
echo -e "\n" >> $logFile
echo -e "[MANUALS] \n" >> $logFile

for romFile in *.* ; do
    if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt ] ; then
        continue
    else
        romName=${romFile%.*}
        for manFile in ./manuals/"$romName"-* ; do
            if test ! -f "$manFile" ; then
                echo "$romName" >> "$logFile"
            fi
        done
    fi
done

#if [ ! -d "~/Téléchargements/logs" ] ; then
    mkdir -p ~/Téléchargements/logs
#fi

mv "$logFile" ~/Téléchargements/logs

Dernière modification par Neelix (Le 15/05/2024, à 08:21)


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#2 Le 14/05/2024, à 13:52

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Bonjour , si tu ne veux pas " traiter " un type de fichier , tu traites le fichier pour l' envoyer nulle part .
pas lu le script mais , si tu fais par exemple
" if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt -o "$romFile" = "$cfgName" -o "$romFile" = "*.cfg" ] ; then  #On exclut les fichiers gamelist, et tous les "

 "$romFile" = "*.p2k.cfg"

?

PS : Si tu fais plusieurs fois le meme traitement avec des parametres differents , cela s' appelle ( et pourrait devenir ) une fonction .

#On reprends les mêmes actions que précédement pour les manuels des jeux

Dernière modification par iznobe (Le 14/05/2024, à 13:58)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 14/05/2024, à 15:03

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

J'avais déjà essayé, ça :

"$romFile" = "*.p2k.cfg"

Mais les fichiers "p2k.cfg" apparaissent toujours dans le fichier de sortie.

PS : Si tu fais plusieurs fois le meme traitement avec des parametres differents , cela s' appelle ( et pourrait devenir ) une fonction .

Effectivement, le problème, c'est que je ne suis encore pas trop copain avec les fonctions. hmm


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#4 Le 14/05/2024, à 16:09

Watael

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

#!/bin/bash

shopt -s extglob
#...
for f in *!(.p2k.cfg|autres extensions) #motifs séparés par une barre verticale
do
#...
done

Dernière modification par Watael (Le 14/05/2024, à 16:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 14/05/2024, à 17:22

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Ca ne fonctionne toujours pas. Les fichiers cfg sont toujours présents.

for romFile in *!(.p2k.cfg) ; do  #On extrait les fichiers du répertoire de ROMS
    if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt ] ; then  #On exclut les fichiers gamelist, et tous les
        continue                                                                                                          #fichiers cfg présents dans le répertoire de roms
    else
        romName=${romFile%.*}  #On supprime l'extension du fichier de ROM
        for type in "${imgType[@]}" ; do  #On passe en revue les types d'images
            for imgFile in ./images/"${romName}"-"$type".* ; do   #On extrait les fichers d'images du répertoire d'images
                if test ! -f "$imgFile" ; then  #On vérifie que chaque fichier correpondant à la ROM existe
                    echo "$romFile" - "${type^^}" >> "$logFile"  #Si un fichier image manque, on le consigne dans le fichier de sortiex
                fi
            done
        done
    fi
done

Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#6 Le 14/05/2024, à 17:26

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

c' est toi qui a écrit ce code ?

essaie avec un truc du style :
for romFile in *!(.p2k.cfg | gamelist.xml | _info.txt | .cfg # etc ... )
    if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt ] ; then  #On exclut les fichiers gamelist, et tous les
        continue                                                                                                          #fichiers cfg présents dans le répertoire de roms
    else

.......
fi


Dans la mesure du possible , il faut eviter de faire des boucles dans des boucles aussi .


watael aussi indiqué en haut de sa partie de script :

shopt -s extglob

c' est certainement pas pour rien .

Dernière modification par iznobe (Le 14/05/2024, à 17:32)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#7 Le 14/05/2024, à 17:32

Watael

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Neelix a écrit :

Ca ne fonctionne toujours pas.

as-tu bien positionné le shopt ?

+1 iznobe. j'allais parler du if. smile

Dernière modification par Watael (Le 14/05/2024, à 17:35)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 14/05/2024, à 17:59

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

de plus , logiquement , si tu exclus les fichiers " *.cfg " , ca devrait automatiquement exclure avec les fichiers *.p2k.cfg , vu qu ' ils se terminent tous 2 par " .cfg " .

tu devrais donc avoir :

for romFile in *!(.cfg | gamelist.xml | _info.txt |  # etc ... ) tout ce que tu veux exclure dans cette ligne 

plutot que :

for romFile in *!(.p2k.cfg | .cfg | gamelist.xml | _info.txt |  # etc ... )

Dernière modification par iznobe (Le 14/05/2024, à 18:03)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#9 Le 14/05/2024, à 19:11

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

c' est toi qui a écrit ce code ?

Oui c'est moi. Nani m'a donné un coup de main, mais le code est de moi.

J'ai également ajouté

shopt -s extglob

et supprimé la conditionnelle.

Maintenant, les fichier gamelist et _info apparaissent à nouveau dans le fichier de sortie.

Voici la dernière version :

#!/bin/bash
         
shopt -s extglob

location="$PWD"
logFile="$(basename $location)"
                     
if test -f "$logFile" ; then  #On vérifie si le fichier de sortie existe
    rm "$logFile"  #Si le fichier existe, on le supprime
fi

declare -a imgType=( bezel fanart image marquee thumb )  #On crée un tableau contenant les différents types d'images

echo -e "[IMAGES] \n" >> $logFile  #On insère une section dans le fichier de sortie

for romFile in *!(.cfg|gamelist.xml|_info.txt) ; do  #On extrait les fichiers du répertoire de ROMS
     romName=${romFile%.*}  #On supprime l'extension du fichier de ROM
     for type in "${imgType[@]}" ; do  #On passe en revue les types d'images
         for imgFile in ./images/"${romName}"-"$type".* ; do   #On extrait les fichers d'images du répertoire d'images
             if test ! -f "$imgFile" ; then  #On vérifie que chaque fichier correpondant à la ROM existe
                 echo "$romFile" - "${type^^}" >> "$logFile"  #Si un fichier image manque, on le consigne dans le fichier de sortiex
             fi
         done
     done
done

#On reprends les mêmes actions que précédement pour les manuels des jeux
echo -e "\n" >> $logFile
echo -e "[MANUALS] \n" >> $logFile

for romFile in *.* ; do
    if [ "$romFile" = gamelist.xml -o "$romFile" = _info.txt ] ; then
        continue
    else
        romName=${romFile%.*}
        for manFile in ./manuals/"$romName"-* ; do
            if test ! -f "$manFile" ; then
                echo "$romName" >> "$logFile"
            fi
        done
    fi
done

#if [ ! -d "~/Téléchargements/logs" ] ; then
    mkdir -p ~/Téléchargements/logs
#fi

mv "$logFile" ~/Téléchargements/logs

Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#10 Le 14/05/2024, à 22:30

Watael

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

gamelist.xml et _info.txt sont des noms de fichiers, pas des extensions; il faut donc procéder un peu différemment :

shopt -s extglob
#for romFile in *!(.cfg|gamelist.xml|_info.txt) #ERR!
for romFile in !(*.cfg|gamelist.xml|_info.txt)
do
    romName=${romFile%.*}
    for imgFile in ./images/"$romName-"{bezel,fanart,image,marquee,thumb}.*
    do
        fileType=${imgFile##*-}
        fileType=${fileType%.*}
        test -f "$imgFile" || echo "$romFile" - "${fileType^^}" >> "$logFile"
    done
done

NB: les commentaires étant issus de l'algorithme du script, ils devraient apparaître avant les commandes qu'ils décrivent.

Dernière modification par Watael (Le 15/05/2024, à 11:40)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 14/05/2024, à 23:15

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Je viens d'essayer ton dernier script, les fichiers cfg sont toujours présents.

Par contre, après avoir pas mal cherché, j'ai remplacé :

for romFile in *!(.cfg|gamelist.xml|_info.txt) ; do

Par ça :

for romFile in *!(.cfg).dsk ; do

Du coup, les fichiers cfg n'apparaissent plus par contre la sortie du fichier se présente comme ça :

*!(.cfg).dsk - BEZEL
*!(.cfg).dsk - FANART
*!(.cfg).dsk - IMAGE
...

Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#12 Le 14/05/2024, à 23:19

Watael

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

parce que je m'ai gourré de ligne à copier : for romFile in !(*.cfg|gamelist.xml|_info.txt)

Dernière modification par Watael (Le 14/05/2024, à 23:20)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 15/05/2024, à 07:56

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Oui, je viens à l'instant d'avoir la même idée. smile

Du coup, ça fonctionne, à un détail près. Les sous-répertoires figurent maintenant dans le fichiers de sortie. roll


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#14 Le 15/05/2024, à 08:21

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Ca y' est, j'ai trouvé.
Il suffit d'ajouter:

if [ -d "$romFile" ] ; then
    continue
else

pour exclure les répertoire.

Voila le scripts complet :

#!/bin/bash

shopt -s extglob

location="$PWD"
logFile="$(basename $location)"
                     
if test -f "$logFile" ; then  #On vérifie si le fichier de sortie existe
    rm "$logFile"  #Si le fichier existe, on le supprime
fi

declare -a imgType=( bezel fanart image marquee thumb )  #On crée un tableau contenant les différents types d'images

echo -e "[IMAGES] \n" >> $logFile  #On insère une section dans le fichier de sortie

for romFile in !(*.cfg|gamelist.xml|_info.txt|$logFile) ; do  #On extrait les fichiers du répertoire de ROMS
    if [ -d "$romFile" ] ; then
        continue
    else
        romName=${romFile%.*}  #On supprime l'extension du fichier de ROM
        for type in "${imgType[@]}" ; do  #On passe en revue les types d'images
            for imgFile in ./images/"${romName}"-"$type".* ; do   #On extrait les fichers d'images du répertoire d'images
                if test ! -f "$imgFile" ; then  #On vérifie que chaque fichier correpondant à la ROM existe
                    echo "$romFile" - "${type^^}" >> "$logFile"  #Si un fichier image manque, on le consigne dans le fichier de sortiex
                fi
            done
        done
     fi
done

#On reprends les mêmes actions que précédement pour les manuels des jeux
echo -e "\n" >> $logFile
echo -e "[MANUALS] \n" >> $logFile

for romFile in !(*.cfg|gamelist.xml|_info.txt|$logFile) ; do
    if [ -d "$romFile" ] ; then
        continue
    else
        romName=${romFile%.*}
        for manFile in ./manuals/"$romName"-* ; do
            if test ! -f "$manFile" ; then
                echo "$romName" >> "$logFile"
            fi
        done
    fi
done

#if [ ! -d "~/Téléchargements/logs" ] ; then
    mkdir -p ~/Téléchargements/logs
#fi

mv "$logFile" ~/Téléchargements/logs

Il faudra juste que je me mette aux fonctions.

Merci.


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#15 Le 15/05/2024, à 08:41

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Par contre, je viens d'essayer de créer une fonction.

Mais, dans ce cas précis ce n'est pas possible, du moins, à mon avis, car, pour la deuxième partie, qui reprend les même actions que la première,
je travaille avec u sous-répertoire différent (manuals au lieu de images) et d'une variable différente ($manFile au lieu de $imgFile)


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#16 Le 15/05/2024, à 09:16

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Bonjour , si tu veux transformer en fonction , il faut , que tu modifies ta base de code , et que tu transformes ce qui change ,  en paramètre a donner à la fonction .

en dehors de la fonction , tu travailleras alors avant a extraire ces parametres correctement et a les passer ensuite a l' appel de la fonction .

tu devras aussi avoir un parametre ( facile celui-la ) , qui sera pour traiter la sortie probablement .

Mais , c ' est pas une fonction simple pour s ' execer ici roll
et ce n' est pas indispensable pour que ca soit fonctionnel . je n' aurais peu etre pas du en parler .

Dernière modification par iznobe (Le 15/05/2024, à 09:20)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#17 Le 15/05/2024, à 11:24

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

J'étais justement entrain d'essayer. En fait, je suis parvenu à créer une fonction.
Seul petit bémol, pour l'affichage des manuels manquant, je me retrouve avec 5 lignes pour chaque rom.

C'est du à la boucle

for type in "${imgType[@]}" ; do

Voici mon nouveau code :

#!/bin/bash

shopt -s extglob

location="$PWD"
logFile="$(basename $location)"
                     
if test -f "$logFile" ; then  #On vérifie si le fichier de sortie existe
    rm "$logFile"  #Si le fichier existe, on le supprime
fi


declare -a imgType=( bezel fanart image marquee thumb )  #On crée un tableau contenant les différents types d'images

function missing_files () {
    for romFile in !(*.cfg|gamelist.xml|_info.txt|$logFile) ; do  #On extrait les fichiers du répertoire de ROMS
        if [ -d "$romFile" ] ; then
            continue
        else
            romName=${romFile%.*}  #On supprime l'extension du fichier de ROM
            for type in "${imgType[@]}" ; do  #On passe en revue les types d'images
                for testFiles in ./"$1"/"${romName}"-"$type".* ; do   #On extrait les fichers d'images du répertoire d'images
                    if test ! -f "$testFiles" ; then  #On vérifie que chaque fichier correpondant à la ROM existe
                        if [ "$1" == "images" ] ; then
                            echo "$romFile" - "${type^^}" >> "$logFile"  #Si un fichier image manque, on le consigne dans le fichier de sortiex
                        elif [ "$1" == "manuals" ] ; then
                            echo "$romName" >> "$logFile"        
                        fi
                    fi
                done
            done
         fi
    done
}

echo -e "[IMAGES] \n" >> $logFile  #On insère une section dans le fichier de sortie

missing_files images

echo -e "\n" >> $logFile
echo -e "[MANUALS] \n" >> $logFile

missing_files manuals

#if [ ! -d "~/Téléchargements/logs" ] ; then
    mkdir -p ~/Téléchargements/logs
#fi

mv "$logFile" ~/Téléchargements/logs

Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#18 Le 15/05/2024, à 11:42

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

ne vaudrait il pas mieux faire une condition plutot qu ' une boucle ?
tu dois isoler chaque traitement , les uns des autres , d' abord pour la clarté et aussi pour la simplicité du code .
et aussi afficher des commentaires " utiles " .
par exemple , tu peux presenter de la sorte :

# traitement des images manquantes
le code qui ne traite que les images

tu fais une boucle , est elle vraiment necessaire ? a priori je dirais que non , si tu te retrouves avec une sortie de 5 au lieu de une .

# traitement des manuels
le code qui va bien 

pourrais tu indiquer le contenu d' un dossier avec l ' arborescence avec :

namei -l /chemin dossier 

le contenu d' un fichier de sortie attendue correspondant .
car là on travaille un peu a l' aveugle de notre coté , pas facile de s ' imaginer pour l' ensemble du coup .

Dernière modification par iznobe (Le 15/05/2024, à 11:45)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#19 Le 15/05/2024, à 11:43

Watael

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

finalement, le traitement n'est pas exactement le même pour les images et les manuels, alors l'emploi d'une fonction n'est pas possible sans ajouter de complications*
et ça, c'est contraire au KISS principle.

--
* l'imbrication des boucles suffit en terme de complications.
je t'ai d'ailleurs montré comment faire "sauter" la boucle sur le tableau (mal employé ici).

Dernière modification par Watael (Le 15/05/2024, à 11:44)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#20 Le 15/05/2024, à 11:47

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

En fait, cette boucle sert à lister les 6 types d'images si les images de certains type manquent.

Par contre, effectivement, cette boucle est en trop pour les manuels.

ne vaudrait il pas mieux faire une condition plutot qu ' une boucle ?

Le problème c'est qu'il s'agît de passer en revue chaque type d'image pour vérifier sa présence. Comment remplacer cette boucle par une condition ?


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#21 Le 15/05/2024, à 11:49

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

sinon oublie la fonction pour le moment , surtout si tu as un script fonctionnel .


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#22 Le 15/05/2024, à 11:52

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

Par contre, effectivement, cette boucle est en trop pour les manuels.

Dans ce cas , sort la partie manuel de la boucle .


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#23 Le 15/05/2024, à 12:12

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

inalement, le traitement n'est pas exactement le même pour les images et les manuels, alors l'emploi d'une fonction n'est pas possible sans ajouter de complications*

Du coup, je laisse tomber la fonction alors.

Dernière question: Pourquoi, et en quoi le tableau est-il mal employé ? (Désolé, mais j'apprends... hmm)

Dernière modification par Neelix (Le 15/05/2024, à 12:14)


Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#24 Le 15/05/2024, à 14:05

Neelix

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

En fin de compte, j'ai fini par trouver le moyen d'utiliser une fonction d'une manière pas si compliquée. Et c'est toi qui m'a mis sur la voie.

Et oui, on a supprimé la fameuse boucle

for type in "${imgType[@]}" ; do

Celle-la même qui génait.

Du coup, ça donne ça :

#!/bin/bash

shopt -s extglob

location="$PWD"
logFile="$(basename $location)"
               
if test -f "$logFile" ; then  #On vérifie si le fichier de sortie existe
    rm "$logFile"  #Si le fichier existe, on le supprime
fi

function find_missing () {
    for romFile in !(*.cfg|gamelist.xml|_info.txt|$logFile) ; do  #On extrait les fichiers du répertoire de ROMS
        if [ -d "$romFile" ] ; then
            continue
        else
            romName=${romFile%.*}
            
            #On recherche les fichiers images et manuels manquants
            if [ "$1" == "images" ] ; then  #Ici on s'occupe des images
                for imgFile in ./images/"$romName"-{bezel,fanart,image,marquee,thumb}.* ; do 
                    fileType=${imgFile##*-}
                    fileType=${fileType%.*}
                    test -f "$imgFile" || echo "$romFile" - "${fileType^^}" >> "$logFile"
                done
            elif [ "$1" == "manuals" ] ; then  #Ici on s'occupe des manuels
                for manFile in ./manuals/"$romName"-* ; do
                    test -f "$manFile" || echo "$romName" >> "$logFile"
                done
            fi
         fi
    done
}

echo -e "[IMAGES] \n" >> $logFile  #On insère une section dans le fichier de sortie

find_missing images

echo -e "\n" >> $logFile
echo -e "[MANUALS] \n" >> $logFile

find_missing manuals

#if [ ! -d "~/Téléchargements/logs" ] ; then
    mkdir -p ~/Téléchargements/logs
#fi

mv "$logFile" ~/Téléchargements/logs

Xubuntu 22.04 Jammy x64
Intel Core i5-13400 (2.5 GHz / 4.6 GHz) - RAM: 16Go
Gigabyte GeForce RTX 3060 WINDFORCE OC 12G - 12Go
Audio: High Definition Audio Realtek

Hors ligne

#25 Le 15/05/2024, à 15:14

iznobe

Re : [Résolu] Exclure tous les fichiers portant une extension particulère

ca me parait pas trop mal , niveau codification et clarté de code .
Si ca fonctionne , c' est le principal .

Pour les détails , faut voir ca avec le pro tongue : @Watael .

Dernière modification par iznobe (Le 15/05/2024, à 15:15)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne