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 12/11/2016, à 17:23

zazsze

[Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour,
Je souhaiterai renommer un fichier PDF avec certaines données contenues dans celui-ci. Je m'explique.

J'ai un fichier PDF se nommant Rapport_33_01.pdf
Dans ce fichier se trouvent, entre autre, les informations suivantes :
Pays : France
Région : Aquitaine
Département : 33
Commune : BORDEAUX
Population : 239 157 habitants
Je voudrai donc via un script (fichier .sh) que mon fichier soit renommé à l'aide de certaines de ces infos, comme suit : BORDEAUX - 33.pdf (à la place de Rapport_33_01.pdf).

Etant novice sous Ubuntu, j'ai bien entendu cherché sur ce forum et sur internet mais je n'ai rien trouvé. La seule chose approchante étant le renommage d'un tel fichier avec ses métadonnées mais je n'ai pas réussi à l'adapter.
Merci d'avance pour votre aide.

Dernière modification par zazsze (Le 28/11/2016, à 21:15)

Hors ligne

#2 Le 12/11/2016, à 18:44

Compte anonymisé

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

je pense que pour pouvoir le renommer, il faut d'abord extraire les données textuelles contenues dans le fichier PDF. Pour cela je propose une solution avec unoconv

la commande suivante devrait avoir comme résultat le texte tel que vous l'avez décrit dans le post précédent :

unoconv -f txt --stdout Rapport_33_01.pdf

Si c'est le cas, un petit script

#!/bin/bash
for a in *.pdf
do
  region=$(unoconv -f txt --stdout "$a"|grep Région|cut -f3)
  departement=$(unoconv -f txt --stdout "$a"|grep Département|cut -f3)
  echo "$a" -> $region - $departement.pdf
  #mv "$a" "$region - $departement.pdf"
done

qui fait rien en l'état que d'afficher l'ancien et ce que donnerait le nouveau nom. Si ça semble convenir il faut enlever le # pour que les modifications sont prises en compte.

#3 Le 12/11/2016, à 19:13

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonsoir et merci pour la réponse
La première commande ne fonctionne pas. Bien que j'ai installé "unoconv", il semble qu'il y ait un problème avec cette commande. Visiblement, elle n'est pas reconnue. Par contre, lorsque j'exécute la seconde commande (sans le #), le fichier est renommé " - .pdf".

Hors ligne

#4 Le 12/11/2016, à 19:50

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Je viens de me rendre compte que la commande "unoconv" convenait en fait pour LibreOffice. Si j'exécute la seconde commande avec un fichier ".odt" cela fonctionne sauf qu'il me renomme le fichier "Commune : BORDEAUX - Département : 33".odt. Il faudrait donc que cela marche avec un fichier PDF et que le renommage du fichier ne fasse pas apparaître "Commune : " et "Département : "

Hors ligne

#5 Le 13/11/2016, à 08:38

serged

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

zazsze a écrit :

Je viens de me rendre compte que la commande "unoconv" convenait en fait pour LibreOffice.

À remplacer par pdftotext (voir le man pour les détails).


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#6 Le 13/11/2016, à 09:50

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour à tous,
Je viens d'essayer avec "pdftotext" et ça renomme bien le PDF mais pas avec les données souhaitées. Il me le renomme " - .pdf". J'ai essayé plusieurs manipulations, mais rien n'y fait.

Hors ligne

#7 Le 13/11/2016, à 10:03

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour,
Il faudrait que tu montres ce que tu as fait, et une portion du fichier texte contenant les données qui t'intéressent.

Hors ligne

#8 Le 13/11/2016, à 10:21

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour,
j'ai simplement modifié le script de "Anonyme68" comme suit : (désolé mais je ne sais pas édité le script avec un fond noir comme dans les réponses précédentes)
J'ai également changer région par commune car ce sont les infos que je voulais.

#!/bin/bash
for a in *.pdf
do
  commune=$(pdftotext -f txt --stdout "$a"|grep Commune|cut -f3)
  departement=$(pdftotext -f txt --stdout "$a"|grep Département|cut -f3)
  echo "$a" -> $commune - $departement.pdf
  mv "$a" "$commune - $departement.pdf"
done

Quant au fichier texte et aux données que tu me demandes, tout est dans mon premier post. En fait, je souhaite que certaines données se trouvant dans mon fichier PDF servent à le renommer.
Encore merci.

Dernière modification par zazsze (Le 13/11/2016, à 10:29)

Hors ligne

#9 Le 13/11/2016, à 10:27

cqfd93

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour,

zazsze a écrit :

j'ai simplement modifié le script de "Anonyme68" comme suit : (désolé mais je ne sais pas édité le script avec un fond noir comme dans les réponses précédentes)

Ajout des balises à un texte existant :

  • sélectionner le texte

  • cliquer sur le <> de l'éditeur de message
    1471986854.png


cqfd93

Hors ligne

#10 Le 13/11/2016, à 10:30

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Merci pour l'astuce

Hors ligne

#11 Le 13/11/2016, à 10:50

Compte anonymisé

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

au temps pour moi,

il faut absolument que tu colles avant dans un message du forum, pour qu'on puisse voir comment est formaté le texte en sortie :

pdftotext Rapport_33_01.pdf -

(du moins si rien de sensible est présent dans le pdf)

#12 Le 13/11/2016, à 10:57

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Ok d'accord,
Donc lorsque j'exécute ce script (pdftotext Rapport_33_01.pdf) voilà ce qui apparaît dans mon fichier texte :

Pays : France
Région : Aquitaine
Département : 33
Commune : BORDEAUX
Population : 239 157 habitants

Dernière modification par zazsze (Le 13/11/2016, à 11:04)

Hors ligne

#13 Le 13/11/2016, à 11:02

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Je pense qu'il suffit de remplacer

cut -f3

par

cut -d" " -f3

Ajouté :
Je te conseille aussi de remplacer

mv ...

par

mv -i ...

pour ne pas écraser un fichier de même nom.

Dernière modification par pingouinux (Le 13/11/2016, à 11:14)

Hors ligne

#14 Le 13/11/2016, à 11:14

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Cela ne fonctionne pas. J'ai le même résultat avec comme message d'erreur dans le terminal :
/home/xxx/Bureau/Dossier/Script.sh: ligne 6: $commune : redirection ambiguë

Hors ligne

#15 Le 13/11/2016, à 11:22

Compte anonymisé

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Avec les modifications de pingouinux :

(et sans la ligne 6)

#!/bin/bash
for a in *.pdf
do
  commune=$(pdftotext "$a" -|grep Commune|cut -d" " -f3)
  departement=$(pdftotext "$a" -|grep Département|cut -d" " -f3)
  mv -i "$a" "$commune - $departement.pdf"
done

Cordialement

#16 Le 13/11/2016, à 11:35

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

C'est tout bon !!!
J'ai essayé avec plusieurs fichiers PDF et tout est OK
Un grand merci à tous

PS : Si je puis me permettre une autre question. Si j'ai 2 fichiers PDF ayant un nom différend mais ayant les mêmes infos, comment faire pour qu'ils soient renommés avec un nom différend, comme par exemple en ajoutant "-2" sur le second fichier renommé et ainsi de suite.

Et aussi, comment met-on "RÉSOLU".

Dernière modification par zazsze (Le 13/11/2016, à 11:38)

Hors ligne

#17 Le 13/11/2016, à 11:56

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Si j'ai 2 fichiers PDF ayant un nom différend mais ayant les mêmes infos, comment faire pour qu'ils soient renommés avec un nom différend, comme par exemple en ajoutant "-2" sur le second fichier renommé et ainsi de suite.

Le plus simple serait d'ajouter les nouvelles informations au nom initial du fichier.
Par exemple

mv -i "$a" "$a - $commune - $departement.pdf"

Personnellement, j'évite de laisser des espaces dans les noms des fichiers, car c'est souvent une source d'ennuis.

Et aussi, comment met-on "RÉSOLU".

Tu modifies ton premier message, et tu ajoutes [Résolu] dans le titre.

Hors ligne

#18 Le 13/11/2016, à 12:07

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Cela fonctionne effectivement mais comme je souhaite que mes fichiers PDF ne porte plus l'ancien nom mais uniquement le nouveau, je vais donc cherché sur le forum si je trouve mon bonheur.
Encore merci à tous pour vos précieuses connaissances.

Hors ligne

#19 Le 13/11/2016, à 12:13

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Si tu ne trouves rien, je regarderai plus tard.

Hors ligne

#20 Le 13/11/2016, à 12:18

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Merci.
Je repasserai donc de temps en temps voir ce post et vous tiendrez au courant de mes recherches.

Hors ligne

#21 Le 13/11/2016, à 14:34

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

En complétant le script d'Anonyme68 #15, je te suggère ceci :

#!/bin/bash
nouveau_nom() {
   racine=$1; num=0
   while true
   do
      [ -f "$racine-$((++num)).pdf" ] || break
   done
   echo "$racine-$num.pdf"
}
for a in *.pdf
do
  commune=$(pdftotext "$a" -|grep Commune|cut -d" " -f3)
  departement=$(pdftotext "$a" -|grep Département|cut -d" " -f3)
  mv -i "$a" "$(nouveau_nom "$commune - $departement")"
done

S'il n'y a qu'un seul fichier, il y aura quand me le suffixe -1, mais ça peut s'arranger si ça ne convient pas.

Dernière modification par pingouinux (Le 13/11/2016, à 14:34)

Hors ligne

#22 Le 13/11/2016, à 17:08

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Chapeau bas !!!
Je ne pensais pas que ça irai si vite.
Il est vrai que s'il était possible de ne pas utiliser de suffixe s'il n'y avait qu'un seul fichier, ce serait "la cerise sur le gâteau". Mais si tu as le temps, à tes heures perdues, si je suis toujours preneur.
Par contre, je viens de découvrir autre chose. Lorsque dans mon PDF d'origine, il y a 2 fois les mêmes données servant à renommer mon fichier, elles sont doublées dans le nom après renommage ; ce qui est normal. Par contre, il y a une sorte de petit rectangle avec des chiffres entre ces mêmes données que je n'arrive pas à enlever via le script.

380595Capture.png

Toujours concernant ces "doubles données", est-il possible justement que lorsque ces données sont en double dans un même fichier de ne les faire apparaître qu'une seule fois dans le nouveau nom.

Je viens de me rendre compte que je demande encore beaucoup de choses mais l'essentiel est réglé. Donc ce n'est pas une propriété.
Au plaisir de te relire, toi ou une autre bonne âme.

Dernière modification par zazsze (Le 13/11/2016, à 17:30)

Hors ligne

#23 Le 13/11/2016, à 17:34

pingouinux

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Pas testé

#!/bin/bash
nouveau_nom() {
   racine=$1; num=1
   [ -f "$racine.pdf" ] || { echo "$racine.pdf"; return; }
   while true
   do
      [ -f "$racine-$((++num)).pdf" ] || break
   done
   echo "$racine-$num.pdf"
}
for a in *.pdf
do
  commune=$(pdftotext "$a" -|grep -m 1 Commune|cut -d" " -f3)
  departement=$(pdftotext "$a" -|grep -m 1 Département|cut -d" " -f3)
  mv -i "$a" "$(nouveau_nom "$commune - $departement")"
done

Ajouté : Le caractère bizarre que tu vois est '\n', lorsque le grep retourne plusieurs lignes

Dernière modification par pingouinux (Le 13/11/2016, à 17:37)

Hors ligne

#24 Le 13/11/2016, à 18:02

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bravo encore une fois. Tout fonctionne.
Lorsqu'il n'y a qu'un seul fichier, tout est bon. Aucun suffixe n'apparaît.
Lorsqu'il y a 2 fichiers, le 1er fichier n'a aucun suffixe et le second a le suffixe "-2" et les noms ne sont pas doublés.
Pour moi, ça me va parfaitement et du coup, je n'ai plus de problème avec ce caractère.
Voilà, cette fois le script est complet, fonctionnel et propre.
Un grand merci

Hors ligne

#25 Le 27/11/2016, à 17:14

zazsze

Re : [Résolu] Renommer fichier PDF avec les données contenues dans celui-ci

Bonjour,
J'ouvre à nouveau mon post car mon fichier de départ à changer et je souhaite également faire une autre opération. Je m'explique.
Mon fichier PDF est le suivant :

Pays : France
Région : Aquitaine
Département : 33 (code 5)
Commune : ANDERNOS LES BAINS (Code A33)
Population : 239 157 habitants

Et voici le script que j'utilisais avant que les expressions avec "(code...) n'apparaissent :

#!/bin/bash
nouveau_nom() {
   racine=$1; num=1
   [ -f "$racine.pdf" ] || { echo "$racine.pdf"; return; }
   while true
   do
      [ -f "$racine-$((++num)).pdf" ] || break
   done
   echo "$racine-$num.pdf"
}
for a in *.pdf
do
  commune=$(pdftotext "$a" -|grep -m 1 Commune|cut -d " " -f3)
  departement=$(pdftotext "$a" -|grep -m 1 Département|cut -d " " -f3)
  mv -i "$a" "$(nouveau_nom "$commune - $departement")"
done

Donc, je souhaite toujours que mon fichier prenne le nom de la commune et du département quelque soit le nombre de mots ou de nombres qu'ils comportent et que pour ce faire, il faudrait que le script récupère toutes les données se trouvant entre "Département : " et (code...)" et entre "Commune : " et (code...)". Attention les données se trouvant après "code" changent.
Et ensuite, une fois mes fichiers renommés, les déplacer dans un autre dossier.
J'espère avoir été clair et merci par avance pour votre aide.

Hors ligne