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/04/2012, à 11:19

samfr95

[script] Associer des images/couvertures à des dossiers sous nautilus

Salut à tous...
J'ai pas mal cherché un script qui fonctionnerait encore, et, en desespoir de cause, j'ai codé mon truc. Je vous le livre tel quel (en GPL...) : ça fonctionne chez moi et j'espère que ça pourra servir à quelqu'un mais je n'ai pas le temps pour assurer du support donc je compte sur la communauté, si nécessaire.
Ce script permet d'associer une image dans un répertoire à son icone dans nautilus. Pour moi, il s'agissait de réassocier les images d'albums aux dossiers musicaux.
Le programme liste d'abord les dossiers et, si aucune image n'existe, il recherche un fichier cover.jpg dans le répertoire. S'il ne trouve rien, il  cherche cover.png, pour tous les fichiers cover, puis n'importe quelle image. Dès qu'il trouve une image, il l'associe au dossier.
Il y a une fonction test activable à la ligne 65 (en décommantant la ligne) pour permettre un test sur 5 dossiers avant de lancer le travail sur tout le répertoire.
Si vous avez l'habitude de nommer vos fichiers autrement, un rechercher/remplacer dans gedit devrait permettre de changer cover.jpg en couverture_de_l_album.jpg, par exemple.

#!/bin/bash
#    Associe le fichier cover.jpg à l'image du dossier

#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.
#       

#############################################
##########      CONFIGURATION       #########
debug_count=0


#############################################



#La fonction aide doit rappeler l'usage du programme
aide()
{
echo "Rappel : taper"
echo "$0 "
echo "Associe le fichier cover.jpg à l'image du dossier ou recherche une autre image"
exit 101
}

#créer ici les fonctions spécifiques
_main_()
{
# Balayage des dossiers
OLD_IFS="${IFS}"
IFS=$'\n'

cibles="$(find * -type d -prune)"
# Pour chaque dossier, nommé ${repertoire_cible}
for repertoire_cible in ${cibles}
do 
    cover_found=0
    # Récupération des infos
    if [ """$(gvfs-info -a metadata::custom-icon "${repertoire_cible}")""" = "attributes:" ] ; then echo "Recherche d'une couverture pour ${repertoire_cible}" ; debug_count=$(($debug_count + 1)); else cover_found=1 ; fi
    #Une image trouvée défini cover_found=1
    # Si pas d'image, traitement des jpg par _add_cover_jpg()
    if [ ${cover_found} = 0 ];  then _add_cover_jpg ; fi
    # Si pas d'image, traitement des png par _add_cover_png()
    if [ ${cover_found} = 0 ];  then _add_cover_png ; fi
    # Si pas d'image, traitement des png par _add_cover_any()
    if [ ${cover_found} = 0 ];  then _add_cover_any ; fi
    # Si pas d'image, traitement des png par _add_img_any()
    if [ ${cover_found} = 0 ];  then _add_img_any ; fi
    # Rien ? On prépare le message d'erreur final
    if [ ${cover_found} = 0 ];  then cover_not_found="${cover_not_found} \n ${repertoire_cible}" ; fi
    # Permet de limiter le traitement à 5 (le nombre est modifiable) dossiers sans couverture -> Pour tester si ça marche !
    # Retirer le # en début de la ligne suivant pour activer le mode
    #if [ ${debug_count} -gt 5 ];  then exit 2 ; fi
done
IFS="${OLD_IFS}"
}

_add_cover_jpg()
{
# Recherche d'un jpg
if [ -f ${repertoire_cible}/cover.jpg ]
        # S'il existe, association
then
echo "Utilisation de cover.jpg"
gvfs-set-attribute "${repertoire_cible}" metadata::custom-icon cover.jpg
cover_found=1
else
echo "${repertoire_cible}/cover.jpg n'a pas été trouvé."
fi
}

_add_cover_png()
{
# Recherche d'un png
if [ -f ${repertoire_cible}/cover.png ]
        # S'il existe, association
then
echo "Utilisation de cover.png"
gvfs-set-attribute "${repertoire_cible}" metadata::custom-icon cover.png
cover_found=1
else
echo "${repertoire_cible}/cover.png n'a pas été trouvé."
fi
}

_add_cover_any()
{
# Recherche d'un cover
cover_any=$(find "${repertoire_cible}" -iname 'cover*')
if [ -f "${cover_any}" ]
        # S'il existe, association
then
echo "Utilisation de ${cover_any}"
gvfs-set-attribute "${repertoire_cible}" metadata::custom-icon "${cover_any}"
cover_found=1
else
echo "${repertoire_cible} : aucun fichier cover trouvé."
fi
}

_add_img_any()
{
# Recherche d'un jpg|png|jpeg
cover_img=$(find "${repertoire_cible}"  -iname "*.jpg" -or -iname "*.jpeg" -or -iname "*.png" )
if [ -f "${cover_img}" ]
        # S'il existe, association
then
echo "Utilisation de ${cover_img}"
gvfs-set-attribute "${repertoire_cible}" metadata::custom-icon "${cover_img}"
cover_found=1
else
echo "${repertoire_cible} : aucune image trouvée."
fi
}


#On vérifie les options de ligne de commande
if [ -n "$1" ]
then
    case "$1" in
    --help | --h | help | aide | ? | Aide | --Help | --Aide | --? | --HELP | --AIDE | Help | AIDE | Aide )
    aide
    ;;
    esac
else
#lancer le programme normalement
echo "Pas d'option sélectionnée"
_main_
if [ -n "${cover_not_found}" ]; then echo -e "Pensez à mettre une image dans ${cover_not_found} !" ; fi
fi

5 machines sous Ubuntu et une sous Debian !
Un portable Acer 7730G libéré (avec remboursement...)
Sous linux au quotidien depuis 2005 !

Hors ligne

#2 Le 16/04/2012, à 22:08

metalux

Re : [script] Associer des images/couvertures à des dossiers sous nautilus

Bonjour samfr95,
d'après ta description, je ne vois pas ce que ton script fait par rapport au projet de flozz cover-thumbnailer. Est-ce différent?

Hors ligne

#3 Le 21/04/2012, à 17:41

samfr95

Re : [script] Associer des images/couvertures à des dossiers sous nautilus

A priori, non... Mon script est plus simple et direct, mais certainement moins complet...
En fait je n'avais pas vu qu'il était mis à jour (la version que j'avais ne marchais pas) ! roll
Bref, si ça peut servir à quelqu'un... L'avantage d'un script bash c'est qu'il n'y a rien à installer. neutral


5 machines sous Ubuntu et une sous Debian !
Un portable Acer 7730G libéré (avec remboursement...)
Sous linux au quotidien depuis 2005 !

Hors ligne