web-dev-qa-db-fra.com

Comment convertir tous les fichiers pdf en texte (dans un dossier) en une seule commande?

Je sais que je peux convertir des fichiers PDF en fichiers texte un par un, comme ceci:

$ pdftotext filename.pdf

Mais existe-t-il une seule commande permettant d'effectuer cette conversion sans spécifier de noms de fichiers distincts afin de les convertir tous?

Je vois ici sur Wikipedia , que "les caractères génériques (*), par exemple $ pdftotext * pdf, pour la conversion de plusieurs fichiers, ne peuvent pas être utilisés car pdftotext n'attend qu'un seul nom de fichier".

17
user47206

Ce qui suit convertira tous les fichiers du répertoire actuel:

for file in *.pdf; do pdftotext "$file" "$file.txt"; done
23
Sam
ls *.pdf | xargs -n1 pdftotext

xargs est souvent une solution rapide pour exécuter la même commande plusieurs fois avec juste une petite modification à chaque fois. L'option -n1 permet de s'assurer qu'un seul fichier PDF est transmis à pdftotext à la fois.

Edit: Si vous êtes inquiet à propos des espaces dans les noms de fichiers, vous pouvez utiliser cette alternative:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
8
Ryan Thompson

écrire un script bash

for f in *.pdf; do
  pdftotext "$f"
done

ou tapez-le dans une commande d'une ligne comme suit:

for f in *.pdf; do pdftotext "$f"; done

J'espère que ça aide. Je n'ai pas un grand groupe de fichiers .pdfs pour le tester, mais j'utilise cette stratégie pour convertir mes fichiers .flac en fichiers .ogg.

2
cprofitt
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

Celui-ci affiche sample.pdf.txt.

J'ai essayé d'utiliser celui-ci, comme le suggère l'utilisateur2357111317 et d'inclure également - layout pour préserver la mise en page du texte

for file in *.pdf; do pdftotext -layout "$file"; done
0
hinky

Je dois tout d'abord remercier Sam et Ryan Thompson ainsi que tous les autres répondants - car ma réponse n'est rien d'autre qu'une variante de la possibilité d'ajouter leurs solutions à Actions personnalisées de Thunar:

ainsi, comme toute commande de terminal, une commande permettant de convertir en texte tous les fichiers pdf d'un dossier peut être insérée dans la liste des actions personnalisées dans le gestionnaire de fichiers Thunar.

enter image description here

enter image description here

enter image description here

La commande ici est find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext, (venant de Ryan Thompson ). C’est celle que je préfère utiliser, mais elle tourne mal ... voir ci-dessous ...

enter image description here

enter image description here

... c’est une commande amusante, à utiliser avec précaution: il est fait pour convertir en texte tous les pdf dans le dossier où il est déclenché, donc, s’il est déclenché par erreur dans le dossier de départ, il aura des effets indésirables effets: tous vos fichiers PDF seront convertis en texte!

(Je l'ai testé comme ceci: j'ai créé un dossier appelé "test" sur le bureau contenant un fichier pdf et une série de dossiers dans des dossiers (/Desktop/test/a/b/c/e/f/g/h/i) contenant chacun le même pdf. L'exécution de cette commande dans /Desktop/test a converti tous les pdfs en que dans le dossier "i".)

(Je souhaiterais recevoir des commentaires sur la manière d'ajuster cette commande afin d'éviter ce risque.)

En remplaçant cela par l'autre (for file in *.pdf; do pdftotext "$file" "$file.txt"; done) provenant de Sam , le problème est évité.

Mais dans certains cas, on peut souhaiter exactement ce que la solution de Ryan fait!

0
user47206