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 01/08/2010, à 22:31

cayetanensis

Renommer des pdfs avec leurs métadatas [RÉSOLU]

Bonjour à tous,

J'ai besoin d'un peu d'aide. J'ai un paquet de fichiers pdf qui sont nommés de façon imbitable. Pour y mettre de l'ordre, je rêve d'un script qui utiliserait les métadonnées du pdf pour créer le nom du fichier (sous la forme auteur - titre.pdf par exemple). Mais je suis assez novice et je vois vraiment pas comment faire. Le début c'est probablement la commande :

pdftk xxx.pdf dump_data

qui sort toutes les métadonnés sur la sortie standard, ou

pdftk xxx.pdf dump_data output yyy.txt

qui le sort dans un fichier texte.

Si quelqu'un a une idée, je suis prenneur.

Merci

Dernière modification par cayetanensis (Le 03/08/2010, à 12:34)


cayetanensis

Hors ligne

#2 Le 01/08/2010, à 23:03

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Alors voila le retour de la commande...

pdftk mon_fichier.pdf dump_data

InfoKey: Title
InfoValue: mon_fichier.pdf
InfoKey: Producer
InfoValue: ImageMagick 6.5.7-8 2009-11-26 Q16 http://www.imagemagick.org
InfoKey: ModDate
InfoValue: D:20100723101921
InfoKey: CreationDate
InfoValue: D:20100723101921
NumberOfPages: 2

maintenant créons une boucle qui liste les pdfs

while read pdf
do
done < <(find . -iname '*.pdf')

utilisons une variable qui contiendra tout le retour de la commande
infos=$(pdftk mon_fichier.pdf dump_data)

pour avoir le titre :

sed -n 's/InfoKey: // ; 1p' <<< "${infos}"
Titlte

et pour l'auteur :

sed -n 's/InfoKey: // ; 3p' <<< "${infos}"
Producer

il ne reste plus qu'a mélanger le tout :

voir le post 4

alors teste ce code sur une copie de tes fichiers pdf avant tout !!

Dernière modification par Hizoka (Le 02/08/2010, à 08:30)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 02/08/2010, à 00:13

AnsuzPeorth

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Bjr,
C'est pas l'InfoValue qu'il faut récupérer plutot ?


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#4 Le 02/08/2010, à 08:29

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

oui en effet.

Mais le probleme c'est mon pdf de test qui est pourrave...

pdftk themaplus\ f25e.pdf dump_data
InfoKey: Creator
InfoValue: Acrobat: pictwpstops filter 1.0
InfoKey: Title
InfoValue: 4000140712-03
InfoKey: Producer
InfoValue: Acrobat Distiller 6.0 (Windows)
InfoKey: Author
InfoValue: roland
InfoKey: ModDate
InfoValue: D:20060905121252+02'00'
InfoKey: CreationDate
InfoValue: D:20060905121117+02'00'
PdfID0: b97365e2b885dbea82a2709c9b491969
PdfID1: d0d716e86b9b684d811dad47bfd78edd
NumberOfPages: 48
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals

Vu qu'il n'affiche pas toutes les infos, ça pose problème, il faut faire une recherche à Author et Title et récupérer la ligne suivante...

# Boucle listant tous les pdf du dossier et sous dossiers
while read pdf
do
	# scan les infos du pdf
	infos=$(pdftk "${pdf}" dump_data)

	# Boucle cherchant des infos sur le titre et l'auteur
	for i in Title Author
	do
		# récupération de la ligne de i
		ligne=$(grep -n "${i}" <<< "${infos}")

		# Si la variable ligne est video, c'est qu'il na pas trouvé i (auteur ou titre)
		if [[ -z ${ligne} ]]
		then
			echo "le fichier : '${pdf}' ne contient pas de donnée sur '${i}'. Fichier sauté." && continue 2

		# Dans le cas ou la variable ligne est valide, on continue
		else
			# On enlève tout jusqu'au 1er : , ce qui nous donne la ligne
			ligne=${ligne%%:*}

			# On ajoute 1 à ce numéro afin d'avoir la ligne qui suit et qui contient les données
			ligne=$((${ligne} + 1))

			# Si on recherche des infos sur le titre, on remplie la variable titre
			if [[ ${i} == Title ]]
			then
				titre=$(sed -n "s/InfoValue: // ; ${ligne}p" <<< "${infos}")

			# Si on recherche des infos sur l'auteur, on remplie la variable auteur
			elif [[ ${i} == Author ]]
			then
				auteur=$(sed -n "s/InfoValue: // ; ${ligne}p" <<< "${infos}")
			fi
		fi
	done

	# Vérification de l'existence d'un fichier portant le même nom
	if [[ -e "${pdf%/*}/${auteur} - ${titre}.pdf" ]]
	then
		echo "le fichier : '${pdf}' doit être renommé en '${pdf%/*}/${auteur} - ${titre}.pdf' mais ce fichier existe déja. Fichier sauté."
		continue

	# Si pas de fichier déjà existent, on renomme le fichier
	else
		mv "${pdf}" "${pdf%/*}/${auteur} - ${titre}.pdf"
	fi
done < <(find . -iname '*.pdf')

voila un autre code plus fonctionnel...

en sachant qu'on peut améliorer :
- Si pas de titre, on pourrait lui dire de choisir un autre paramètre, idem pour l'auteur (utiliser le logiciel de création...) ou donner une valeur de base (comme inconnu)
- Mettre en majuscule uniquement la 1ere lettre du titre et de l'auteur tongue
- réduire la syntaxe mais si tu débutes, c'est plus clair comme ça

Dernière modification par Hizoka (Le 02/08/2010, à 08:33)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 02/08/2010, à 09:23

cayetanensis

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Merci pour cette réponse, c'est dans l'esprit exactement ce que je cherche. Je me doutais qu'il allait falloir utiliser sed mais la syntaxe m'avait toujours rebuté. Bon je vais devoir m'y plonger...

Cela dit le script ne fonctionne pas, il me renvoie

Syntax error: redirection unexpected

pour la première ligne avec le sed.

Histoire d'y voir plus clair, je l'ai simplifié à outrance pour le faire fonctionner sur une seule variable et sans la boucle. Ce que donne :

info=$(pdftk monfichier.pdf dump_data)
titre=$(sed -n 's/InfoKey: // ; 1p' <<< "${info}")
mv monfichier.pdf "${titre}.pdf"

Et même là, j'obtiens encoe

renpdf.sh: 2: Syntax error: redirection unexpected

Chose surprenante, ça marche si je rentre les lignes une à une en console.

Bref j'ai besoin d'encore un petit coup de pouce...


cayetanensis

Hors ligne

#6 Le 02/08/2010, à 09:29

roger64

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Bonjour

Il y a plein de petits softs graphiques qui fonctionnent avec Wine et qui permettent de modifier les metadata des pdf.
BeCyPDFMetaedit par exemple.
http://www.becyhome.de/becypdfmetaedit/description_eng.htm
mais aussi A-PDF Info, PDF Info et sans doute d'autres...

Mais je ne voudrais pas vous gâcher le plaisir. Je ne suis pas dans "l'esprit"..:P

Dernière modification par roger64 (Le 02/08/2010, à 09:32)

Hors ligne

#7 Le 02/08/2010, à 10:37

cayetanensis

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

@roger64 : c'est pas une question "d'esprit", c'est simplement pas ce que l'on cherche à faire

@Hizoka : merci pour ton investissement sur mon problème. Je ne dirais pas que je débute, mais plutôt que mon niveau n'est pas très très élevé (je bidouille depuis un cetains temps, mais c'est pas du tout mon métier alors je tatonne un peu).

Exemple : j'ai trouvé pourquoi j'avais un erreur à l'exécution du script. Jusqu'ici j'ai toujours exécuté mes propres scripts faits-maison avec la commande sh. Et là, visiblement il est indispensable de l'exécuter avec bash. T'as compris le niveau quoi.

Donc là effectivement, ça marche impec. Sauf que :
- le nouveau nom des pdf est parfois trop long et mv refuse de renommer
- les titres et les auteurs contiennent des caractères accentués qui apparaissent sous la forme HTML genre &.#.1.9.5.; (sans les points mais sinon ça me le converti dans le navigteur !)

Dernière modification par cayetanensis (Le 02/08/2010, à 10:41)


cayetanensis

Hors ligne

#8 Le 02/08/2010, à 12:36

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

sed -n 's/InfoKey: // ; 1p' <<< "${info}"

Ca dit, supprime "InfoKey: " et affiche la ligne 1

si tu ajoutes :

titre=$(echo -e "${titre/\%/\\x}")

apres

titre=$(sed -n 's/InfoKey: // ; 1p' <<< "${info}")

ça regle le problème de caractère ?

pour les noms trop long...ca doit être vraiment tres long... je vois pas trop quoi faire a part tronquer les noms...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 02/08/2010, à 14:31

cayetanensis

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Ta proposition ne corrige pas les codes html. Ils apparaissent de toute façon déjà dans le fichier pdf original, donc c'est pas une erreur du script, c'est juste que les fichiers en été créés avec les pieds... Si tu connais un truc pour leur rendre un aspect lisible je prends.

Pour les noms trop longs si tu as une astuce pour les tronquer, genre à 50 caractères, ça me va (et oui, c'est des publications scientifiques et les titres à ralonges sont la règle).

Quelques modifs apportées de mon côté : le recherche sur le chaîne de caractère "Title" peut poser deux types de problèmes :
- Si avant le vrai titre le mot "Title" apparaît, le script croira que la ligne suivante est le vrai titre alors que non. Par exemple, si un auteur s'appelle James Titlehood.
- S'il n'y a pas de titre mais des bookmarks, les caractères BookmarkTitle sont aussi interceptés par le script.

Solution : lancer le grep sur "InfoKey: Title" et "InfoKey: Author" au lieu des seuls Title ou Author.

Merci encore pour ton aide, je suis à deux doigts d'avoir le script qui va me permettre de faire en 3 secondes un truc qui me prendra dix heures à coup de double-clique sélection contrôle-c clique F2 contrôle-V return...


cayetanensis

Hors ligne

#10 Le 02/08/2010, à 14:43

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Pour les noms trop longs si tu as une astuce pour les tronquer, genre à 50 caractères, ça me va

cut -c 50 <<< "${titre}"

ravi de pouvoir t'aider.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 02/08/2010, à 14:48

roger64

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

cayetanensis a écrit :

Merci encore pour ton aide, je suis à deux doigts d'avoir le script qui va me permettre de faire en 3 secondes un truc qui me prendra dix heures à coup de double-clique sélection contrôle-c clique F2 contrôle-V return...

Au cas où cette remarque ferait allusion au graticiel que j'ai évoqué plus haut, sache qu'il suffit de glisser l'icône du fichier à modifier dans le champ appelé "PDF document" pour que son chemin absolu y soit enregistré, puis d'écrire ou de modifier le cas échéant les valeurs des metadata dans les champs ad hoc et de sauvegarder pour que le fichier PDF soit modifié.

1280755290.png

Ce qui n'enlève rien à l'intérêt de ton étude puisque je n'ai pas encore trouvé de façon aussi simple de le faire sous Linux.

Dernière modification par roger64 (Le 02/08/2010, à 15:36)

Hors ligne

#12 Le 02/08/2010, à 15:57

cayetanensis

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

@roger64 : j'insiste mais je ne veux PAS MODIFIER les métadatas du pdf (fonction pour laquelle il existe une chiée de programme sous Linux sans avoir à installer Wine), je veux les utiliser pour renommer le fichier !!! Et je veux un traitement en masse.

Et ce que m'aide gentiment à faire Hizoka. C'est exactement ce que je cherche. En outre, aucune solution graphique de cliquer-déposer ne me conviendra.


cayetanensis

Hors ligne

#13 Le 02/08/2010, à 16:09

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

as tu le script que tu voulais ou veux tu d'autres options ou infos ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#14 Le 02/08/2010, à 16:24

AnsuzPeorth

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

@roger64
j'ai pas cherché, mais ca m'etonne qu'il n'existe rien pour gérer les metadata d'un pdf ?

@hizoka
Une petite erreur

cut -c-50

Un petit exemple juste avec sed et cut. (à adapter, je nai pas essayé)

while read pdf
 do
   infos=$(pdftk "${pdf}" dump_data)
   titre=$(sed -n 'N;/InfoKey: Title/ s/.*\nInfoValue: //p' <<< "$infos" | cut -c-10)
   auteur=$(sed -n 'N;/InfoKey: Author/ s/.*\nInfoValue: //p' <<< "$infos" | cut -c-10)
   # si variable vide, on ne fait rien, peut etre un nom par défaut serait bienvenue plutot ???
   [[ -z "$titre" ]] || [[ -z "$auteur" ]] && continue
   #rename "s/\/[^\/]*$/\/$titre - $auteur/"
   echo $titre $auteur
  done < <(find . -iname '*.pdf')

Pour les problèmes d'entité html, à part faire ça soit même (je connais rien qui le fasse tout seul !). Mais c'est pas bien sorcier non plus, surtout qu'il n'y a pas beaucoup d'entités utilisées, une petite fonction sed ferait bien l'affaire !

EDIT: Exemple d'une focntion sed

function MySed()
{
sed 's/un/deux/g
s/truc/machin/g'
}
echo 'un truc' | MySed
#deux machin

Pour les entités:
http://alexandre.alapetite.fr/doc-alex/alx_special.html

Dernière modification par AnsuzPeorth (Le 02/08/2010, à 16:34)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#15 Le 02/08/2010, à 17:34

roger64

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

AnsuzPeorth a écrit :

@roger64
j'ai pas cherché, mais ca m'etonne qu'il n'existe rien pour gérer les metadata d'un pdf ?

de façon simple non. J'avais fait une recherche qui date maintenant d'un peu plus d'un an, mais sauf nouveauté, il n'y a que des trucs lourdingues genre pdftk. On a l'impression d'avoir des gants de boxe quand on s'en sert...

En tout cas, je suis preneur si ça existe aujourd'hui mais j'en doute fort.

Hors ligne

#16 Le 02/08/2010, à 20:06

AnsuzPeorth

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

roger64 a écrit :

En tout cas, je suis preneur si ça existe aujourd'hui mais j'en doute fort.

J'ai rien trouvé de génial non plus !

Il existe un GUI pour pdftk, mais j'ai pas l'impression qu'il ne permet pas la modification de metada ?
http://www.paehl.de/pdf/gui_pdftk.html

Comme j'ai encore un peu de temps ces jours-ci, je vais m'y mettre, ca m'a pas l'air bien compliqué ...
C'est l'occasion de m'amuser avec glade2script !

Dernière modification par AnsuzPeorth (Le 02/08/2010, à 20:07)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#17 Le 02/08/2010, à 20:24

roger64

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Ce serait bien smile

Cette recherche sur Google avec pdf metadata editor fournit quelques pistes mais pas grand chose pour Linux
ou celle-ci edit pdf metadata linux

Dernière modification par roger64 (Le 02/08/2010, à 20:24)

Hors ligne

#18 Le 02/08/2010, à 20:58

Totor

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

à peine plus complexe ...

while read pdf
 do
   unset auteur titre
   infos=$(pdftk "${pdf}" dump_data)
   infos="${infos/*InfoKey: Creator$'\n'InfoValue: /auteur=\"}"
   infos="${infos/$'\n'*InfoKey: Title$'\n'InfoValue: /\";titre=\"}"
   infos="${infos%%$'\n'*}\""
   eval "${infos}"

   [[ -z "$titre" ]] || [[ -z "$auteur" ]] && continue
   echo $titre $auteur
done < <(find . -iname '*.pdf')

-- Lucid Lynx --

Hors ligne

#19 Le 02/08/2010, à 23:56

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

perso ca ne me renvoie rien.

tu peux préciser :
${infos/*InfoKey: Creator$'\n'InfoValue: /auteur=\"}
utilise la variables infos, remplace tout jusqu'a InfoKey: Creator par rien du tout (donc supprime) mais apres...
$'\n' permet le saut de ligne ?
/auteur= permet la creation d'une nouvelle variable ? (via eval)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#20 Le 03/08/2010, à 08:05

Totor

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

J'ai écris ce script en fonction de la sortie de ta pdftk (que tu as indiqué dans ta première réponse).
Pour test :

infos="InfoKey: Creator
> InfoValue: Acrobat: pictwpstops filter 1.0
> InfoKey: Title
> InfoValue: 4000140712-03
> InfoKey: Producer
> InfoValue: Acrobat Distiller 6.0 (Windows)
> InfoKey: Author
> InfoValue: roland
> InfoKey: ModDate
> InfoValue: D:20060905121252+02'00'
> InfoKey: CreationDate
> InfoValue: D:20060905121117+02'00'
> PdfID0: b97365e2b885dbea82a2709c9b491969
> PdfID1: d0d716e86b9b684d811dad47bfd78edd
> NumberOfPages: 48
> PageLabelNewIndex: 1
> PageLabelStart: 1
> PageLabelNumStyle: DecimalArabicNumerals"
ubuntu@ubuntu:~$ infos="${infos/*InfoKey: Creator$'\n'InfoValue: /auteur=\"}"
ubuntu@ubuntu:~$    infos="${infos/$'\n'*InfoKey: Title$'\n'InfoValue: /\";titre=\"}"
ubuntu@ubuntu:~$    infos="${infos%%$'\n'*}\""
ubuntu@ubuntu:~$    eval "${infos}"
ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ echo $titre $auteur
4000140712-03 Acrobat: pictwpstops filter 1.0

les explications :
infos="${infos/*InfoKey: Creator$'\n'InfoValue: /auteur=\"}" : on remplace tout le texte jusqu'à InfoKey: Creator$'\n'InfoValue: ($\n' étant effectivement un saut de ligne) par auteur="
On obtient donc ceci :

auteur="Acrobat: pictwpstops filter 1.0
InfoKey: Title
InfoValue: 4000140712-03
InfoKey: Producer
InfoValue: Acrobat Distiller 6.0 (Windows)
InfoKey: Author
InfoValue: roland
InfoKey: ModDate
InfoValue: D:20060905121252+02'00'
InfoKey: CreationDate
InfoValue: D:20060905121117+02'00'
PdfID0: b97365e2b885dbea82a2709c9b491969
PdfID1: d0d716e86b9b684d811dad47bfd78edd
NumberOfPages: 48
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals

infos="${infos/$'\n'*InfoKey: Title$'\n'InfoValue: /\";titre=\"}" : on remplace tout ce qui va du 1er saut de ligne jusqu'à InfoKey: Title$'\n'InfoValue: par ";titre="
On obtient donc :

auteur="Acrobat: pictwpstops filter 1.0";titre="4000140712-03
InfoKey: Producer
InfoValue: Acrobat Distiller 6.0 (Windows)
InfoKey: Author
InfoValue: roland
InfoKey: ModDate
InfoValue: D:20060905121252+02'00'
InfoKey: CreationDate
InfoValue: D:20060905121117+02'00'
PdfID0: b97365e2b885dbea82a2709c9b491969
PdfID1: d0d716e86b9b684d811dad47bfd78edd
NumberOfPages: 48
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals

enfin infos="${infos%%$'\n'*}\"" : on supprime tout ce qui suit le 1er saut de ligne puis on rajoute une guillemet au résultat. Ce qui donne :

auteur="Acrobat: pictwpstops filter 1.0";titre="4000140712-03"

Cela dit, je viens de me rendre compte que je récupère la valeur de Creator et non de Author.
Peut importe, il suffit d'inverser :

while read pdf
 do
   unset auteur titre
   infos=$(pdftk "${pdf}" dump_data)
   infos="${infos/*InfoKey: Title$'\n'InfoValue: /titre=\"}"
   infos="${infos/$'\n'*InfoKey: Author$'\n'InfoValue: /\";auteur=\"}"
   infos="${infos%%$'\n'*}\""
   eval "${infos}"

   [[ -z "$titre" ]] || [[ -z "$auteur" ]] && continue
   echo "${titre}-${auteur}"
done < <(find . -iname '*.pdf')

EDIT : le eval permet d'évaluer la ligne générée.

Dernière modification par Totor (Le 03/08/2010, à 08:07)


-- Lucid Lynx --

Hors ligne

#21 Le 03/08/2010, à 11:22

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

merci bien pour les explications, c'est un chouille plus compliqué à mettre en place mais surement plus rapide smile

merci beaucoup pour tes explications !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#22 Le 03/08/2010, à 12:31

cayetanensis

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

Hizoka a écrit :

as tu le script que tu voulais ou veux tu d'autres options ou infos ?

Oui, c'est parfait ! Merci à tous. Je préfère ton script Hizoka, qui est plus lisible et plus facile à modifier et débugger pour moi et mes modestes connaissances. Merci à tous en tout cas.

Voici pour la postérité le script tel que je l'utilise actuellement

#!/bin/bash

# Boucle listant tous les pdf du dossier et sous dossiers
while read pdf
do
    # scan les infos du pdf
    infos=$(pdftk "${pdf}" dump_data)

    # Boucle cherchant des infos sur le titre et l'auteur
    for i in "InfoKey: Title" "InfoKey: Author"
    do
        # récupération de la ligne de i
        ligne=$(grep -n "${i}" <<< "${infos}")

        # Si la variable ligne est vide, c'est qu'il na pas trouvé i (auteur ou titre)
        if [[ -z ${ligne} ]]
        then
            echo "le fichier : '${pdf}' ne contient pas de donnée sur '${i}'. Fichier sauté." && continue 2

        # Dans le cas ou la variable ligne est valide, on continue
        else
            # On enlève tout jusqu'au 1er : , ce qui nous donne la ligne
            ligne=${ligne%%:*}

            # On ajoute 1 à ce numéro afin d'avoir la ligne qui suit et qui contient les données
            ligne=$((${ligne} + 1))

            # Si on recherche des infos sur le titre, on remplie la variable titre
            if [[ ${i} == "InfoKey: Title" ]]
            then
                titre=$(sed -n "s/InfoValue: // ; ${ligne}p" <<< "${infos}")
		titre=$(cut -c-50 <<< "${titre}")

            # Si on recherche des infos sur l'auteur, on remplie la variable auteur
            elif [[ ${i} == "InfoKey: Author" ]]
            then
                auteur=$(sed -n "s/InfoValue: // ; ${ligne}p" <<< "${infos}")
		auteur=$(cut -c-10 <<< "${auteur}")
            fi
        fi
    done

    # Vérification de l'existence d'un fichier portant le même nom
    if [[ -e "${pdf%/*}/${auteur} - ${titre}.pdf" ]]
    then
        echo "le fichier : '${pdf}' doit être renommé en '${pdf%/*}/${auteur} - ${titre}.pdf' mais ce fichier existe déja. Fichier sauté."
        continue

    # Si pas de fichier déjà existent, on renomme le fichier
    else
        mv "${pdf}" "${pdf%/*}/${auteur} - ${titre}.pdf"
    fi
done < <(find . -iname '*.pdf')

Il mérite encore quelques évolutions, mais je pense que je vais m'en sortir seul. Ça me motivera à me plonger dans sed, outils que j'avais jusque là bien trop négligé.

La version finale idéale aura :
- quelques sed pour venir à bout des entités html planqués dans les titres
- un autre sed à la place du cut-c-10 pour les auteurs (j'ai en fait plusieurs noms d'auteurs sous la forme "P. Nom; P. Nom2; etc" et je voudrais juste garder le nom du premier auteur pour le classement alphabétique)
- enfin une gestion du / car quand il y en a un dans le titre du pdf, forcément mv croit que je veux le changer de répertoire...

Je vous tiens au courant, mais allez, je mets un RÉSOLU !


cayetanensis

Hors ligne

#23 Le 03/08/2010, à 12:34

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

ravi de t'avoir aidé, si tu as du mal à faire les évolutions évoqués, reposte un message ici wink


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#24 Le 03/08/2010, à 13:42

AnsuzPeorth

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

@cayetanensis
sed est un outil incontournable, mais regarde également les substitutions bash (ce que Totor propose), c'est beaucoup plus rapide que n'importe quelle commande pour le même résultat !
http://abs.traduc.org/abs-5.3-fr/ch09s02.html

@roger64
Premier jet d'un GUI pour éditer les metadata avec pdftk:
http://gwebradio.googlecode.com/files/G … .1a.tar.gz

Je vais sûrement ajouter des fonctionnalités proposé par pdftk, j'ouvrirai un thread dédié par la suite.( un petit retour d'user avant serait bien, sans vouloir polluer le post de cayetanensis smile )

Capture-glade2script.py.png


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#25 Le 03/08/2010, à 14:03

Hizoka

Re : Renommer des pdfs avec leurs métadatas [RÉSOLU]

ca m'a l'air de fonctionner.

mais ca ne repond pas du tout à la demande initiale smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne