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 09/05/2024, à 18:24

Neelix

[Résolu] Script d'affichage fichiers manquants

Bonjour,

Je stocke des roms pour l'émulation dans un répertoire, et les images correspondantes (filename-boite.ext, filename-image.ext, etc) dans
le répertoire "images" situé dans le dossier des roms.

J'aimerais vérifier que chaque fichiers rom à un équivalent dans un format d'images dans le répertoire "images".

Je parviens à récupérer les noms des fichiers sans extension, mais, dans tous les cas, le script insère le nom du dernier fichier
présent dans le répertoire des roms dans mon fichier "missing", même si il est présent dans le répertoire image.

Voici mon script :

#!/bin/bash

#On récupère la base des noms des fichier du repertoire de base sans extension
for file in * ; do
   fbname=${file%.*}
done >&2

#On récupère la base des noms des fichiers du répertoire d'images sans extention
for image in ./images/* ; do
   imgname=${image%-*.*}
   if [[ $imgname != $fbname ]]; # On vérifie que la base du nom de fichier $fbname est présente dans les 2 repertoires 
   then
      echo "$fbname" > missing # Si $fbname est manquant dans le répertoire d'images, on l'inscrit dans le fichier "missing"
   fi
done

Si quelqu'un de plus doué que mon auguste personne pouvait m'aider.

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


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 09/05/2024, à 21:05

pingouinux

Re : [Résolu] Script d'affichage fichiers manquants

Bonsoir,
Quand tu exécutes la seconde boucle, fbname a toujours la même valeur.

D'autre part

echo "$fbname" > missing 

écrase le fichier missing, qui ne contiendra au plus qu'une valeur.

Hors ligne

#3 Le 09/05/2024, à 21:18

nany

Re : [Résolu] Script d'affichage fichiers manquants

Bonjour,



Il faut traiter les fichiers un par un dans la première boucle sinon fbname prend fatalement la dernière valeur.
Ensuite il faut vérifier la présence de fichiers dont le nom commence par fbname dans le répertoire images.
Enfin, il faut ajouter le nom de fichier manquant dans missing et non pas réécrire le fichier à chaque fois (si missing existe déjà, il vaut mieux le supprimer au début du script).

Voici donc une proposition :

#!/bin/bash

if test -f missing ; then
    rm missing
fi
for file in *.* ; do
    fbname=${file%%.*}
    for image in ./images/"$fbname"-* ; do
        if test ! -f "$image" ; then
            echo "$fbname" >> missing
        fi
    done
done

[edit]Grilled![/edit]

Dernière modification par nany (Le 09/05/2024, à 21:23)

Hors ligne

#4 Le 09/05/2024, à 21:35

Neelix

Re : [Résolu] Script d'affichage fichiers manquants

Je te remercie nany.

Ton script pose juste un petit problème. Lorsque qu'un nom de fichier contient un point, soit il
apparait dans missing même si les images sont présentes, soit le nom est tronqué après le point.

J'ai donc ajoputé une petite modification :

fbname=${file%.*}

Au lieu de :

fbname=${file%%.*}

Du reste, pourquoi %% au lieu de % ?


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

#5 Le 09/05/2024, à 21:35

Watael

Re : [Résolu] Script d'affichage fichiers manquants

il n'y a besoin que d'une seule boucle.

cette boucle tourne sur le répertoire dont on est sûr que les fichiers existent (for f in existing/*)
on nettoie le nom du fichier ("$f") en cours de lecture par la boucle pour récupérer la partie commune
on construit le nom avec les constantes du répertoire à vérifier
on teste l'existence du fichier (test -f "$ficTest"), dont on vient de construire le nom,
et selon le résultat du test on exécute telle ou telle autre commande.

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


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

En ligne

#6 Le 09/05/2024, à 21:44

nany

Re : [Résolu] Script d'affichage fichiers manquants

Neelix a écrit :

Du reste, pourquoi %% au lieu de % ?

Une erreur de ma part.

Hors ligne

#7 Le 09/05/2024, à 21:46

nany

Re : [Résolu] Script d'affichage fichiers manquants

Watael a écrit :

il n'y a besoin que d'une seule boucle.

cette boucle tourne sur le répertoire dont on est sûr que les fichiers existent (for f in existing/*)
on nettoie le nom du fichier ("$f") en cours de lecture par la boucle pour récupérer la partie commune
on construit le nom avec les constantes du répertoire à vérifier
on teste l'existence du fichier (test -f "$ficTest"), dont on vient de construire le nom,
et selon le résultat du test on exécute telle ou telle autre commande.

Je n’ai pas tout compris. tongue

Hors ligne

#8 Le 09/05/2024, à 22:05

Watael

Re : [Résolu] Script d'affichage fichiers manquants

d'après ce que j'ai compris, pour chaque fichier filename-boite.ext, on veut vérifier qu'un fichier filename-image.ext existe.
ces deux fichiers ont en commun un nom (filename) et une extension (ext), qui changent pour chaque fichier; ça, on se les met de côté dans deux variables.
les noms des répertoires sont connus, ainsi que la partie fixe dans les noms des fichiers (boite ou image)

on met donc le "fichier boite" à poil et on le rhabille en "fichier image" ($fname-image.$ext), puis on teste ce nom dans le répertoire image/ (test -f images/"$fname-image.$ext").
tout ça dans une seule boucle.
en simplifiant:

for f in boites/*
do
    #striptease
    fname=${f...}
    ext=${f...}
    #transformation
    ff="images/$fname-image.$ext"
    test -f "$ff" && echo "$f ok" || echo "$ff missing"
done

c'est plus clair ?

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


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

En ligne

#9 Le 09/05/2024, à 22:11

nany

Re : [Résolu] Script d'affichage fichiers manquants

Watael a écrit :

d'après ce que j'ai compris, pour chaque fichier filename-boite.ext, on veut vérifier qu'un fichier filename-image.ext existe.

Moi j’ai compris qu’il pouvait n’exister qu’un seul de ces fichiers ou bien plusieurs autres (présence de etc dans l’énoncé du problème).
Autrement dit, pour un fichier filename.ext, existe-t-il un ou plusieurs fichiers filename-quelque_chose.ext dans le répertoire images ?

Watael a écrit :

c'est plus clair ?

Pas vraiment, non.

Dernière modification par nany (Le 09/05/2024, à 22:16)

Hors ligne

#10 Le 09/05/2024, à 22:12

Watael

Re : [Résolu] Script d'affichage fichiers manquants

j'ai fait un edit.

j'ai compris le etc comme un "ainsi de suite" pour la liste des fichiers du répertoire.
?

Dernière modification par Watael (Le 09/05/2024, à 22:13)


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

En ligne

#11 Le 09/05/2024, à 22:30

nany

Re : [Résolu] Script d'affichage fichiers manquants

Neelix a écrit :

Je stocke des roms pour l'émulation dans un répertoire, et les images correspondantes (filename-boite.ext, filename-image.ext, etc) dans
le répertoire "images" situé dans le dossier des roms.

J'aimerais vérifier que chaque fichiers rom à un équivalent dans un format d'images dans le répertoire "images".

Alors voila comment j’ai interprété :
pour chaque fichier (appelons-le filename.rom) dans le répertoire courant, existe-t-il au moins un fichier image commençant par filename- (par exemple filename-boite.png ou filename-image.jpg ou que sais-je encore) dans le sous-répertoire images ?

Dernière modification par nany (Le 09/05/2024, à 22:31)

Hors ligne

#12 Le 09/05/2024, à 22:42

Watael

Re : [Résolu] Script d'affichage fichiers manquants

ah, oui, d'accord.

vérifier que chaque fichier rom a un équivalent dans un format d'images

par contre, le format image (et donc l'extension) est inconnu.

c'est pas grave, je ne ferais qu'une seule boucle quand même ! wink
mais j'alimenterais un tableau avec le développement sur la partie connue (et reconstructible), et je testerais le nombre d'élément du tableau...
une seule boucle quand même. big_smile

Dernière modification par Watael (Le 09/05/2024, à 22:42)


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

En ligne

#13 Le 09/05/2024, à 22:45

nany

Re : [Résolu] Script d'affichage fichiers manquants

Watael a écrit :

une seule boucle quand même. big_smile

OK.

Hors ligne

#14 Le 10/05/2024, à 08:48

iznobe

Re : [Résolu] Script d'affichage fichiers manquants

Bonjour , et ca :

#!/bin/bash

for f in rom/*
do
    rom_name=${file%.*}
    img_name=./images/${image%-*.*}
    if [[ $rom_name != $img_name ]];
    then
       echo "$rom_name" >> missing
    fi
done

?
Pas testé ...

Dernière modification par iznobe (Le 10/05/2024, à 08:53)


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

Hors ligne

#15 Le 10/05/2024, à 12:21

Watael

Re : [Résolu] Script d'affichage fichiers manquants

dans mes souvenirs, oui.
dans les quelques tests que j'ai fait, non : le développement ne se fait pas entre crochets doubles.


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

En ligne