#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.
Hors ligne
#6 Le 09/05/2024, à 21:44
- nany
Re : [Résolu] Script d'affichage fichiers manquants
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
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.
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.
Hors ligne
#9 Le 09/05/2024, à 22:11
- nany
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.
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 ?
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.
Hors ligne
#11 Le 09/05/2024, à 22:30
- nany
Re : [Résolu] Script d'affichage fichiers manquants
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 !
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.
Dernière modification par Watael (Le 09/05/2024, à 22:42)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 09/05/2024, à 22:45
- nany
Re : [Résolu] Script d'affichage fichiers manquants
une seule boucle quand même.
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.
Hors ligne