Como converter todos os arquivos pdf em texto (dentro de uma pasta) com um comando?

14

Eu sei que posso converter arquivos pdf em arquivos de texto um por um assim:

$ pdftotext filename.pdf

Mas existe um único comando que faça essa conversão sem especificar nomes de arquivo separados para convertê-los todos?

Eu vejo aqui, na Wikipedia , que "Wildcards (*), por exemplo $ pdftotext * pdf, para converter vários arquivos, não podem ser usados porque o pdftotext espera apenas um nome de arquivo. "

    
por cipricus 04.11.2012 / 19:01

5 respostas

22

o seguinte converterá todos os arquivos no diretório atual:

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

Sam

    
por Sam 04.11.2012 / 19:16
6
ls *.pdf | xargs -n1 pdftotext

xargs geralmente é uma solução rápida para executar o mesmo comando várias vezes com apenas uma pequena alteração a cada vez. A opção -n1 garante que apenas um arquivo pdf seja passado para o pdftotext por vez.

Editar: se você está preocupado com espaços em nomes de arquivos e tal, você pode usar esta alternativa:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
    
por Ryan Thompson 05.11.2012 / 00:24
2

escreva um script bash

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

ou digite-o em um comando de uma linha da seguinte forma:

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

Espero que isso ajude. Eu não tenho um grande grupo de .pdfs para testar isso, mas eu uso essa estratégia para converter meus arquivos .flac para arquivos .ogg.

    
por cprofitt 04.11.2012 / 19:29
0

Tenho que agradecer primeiro ao Sam e ao Ryan Thompson também para todos os outros respondentes - pois a minha resposta aqui é apenas uma variação relativa à possibilidade de adicionar suas soluções às ações personalizadas do Thunar:

assim, como qualquer comando de terminal, um comando para converter em texto todos os arquivos pdf dentro de uma pasta pode ser colocado na lista de ações customizadas no gerenciador de arquivos Thunar

O comando lá é find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext , (vindo de Ryan Thompson ) é o que eu prefiro use, mas tem um rumo desagradável ... veja abaixo ...

... é um comando engraçado, para ser usado com cuidado: ele é feito para converter em texto todo o pdf dentro da pasta onde ele é disparado, então, se ele for disparado por engano na pasta home, ele será tem alguns efeitos indesejados: todos os seus pdfs serão convertidos em texto!

(Eu testei assim: criei uma pasta chamada "test" na área de trabalho e nela um arquivo pdf e uma série de pastas dentro de pastas ( /Desktop/test/a/b/c/e/f/g/h/i ), cada uma contendo o mesmo pdf. Executando esse comando em /Desktop/test converteu todos os pdfs para baixo na pasta "i".)

(Eu gostaria de receber comentários sobre como ajustar este comando para evitar esse risco.)

Substituindo isso por outro ( for file in *.pdf; do pdftotext "$file" "$file.txt"; done ) vindo de Sam , o problema é evitado.

Mas, em certos casos, pode-se desejar exatamente o que a solução de Ryan faz!

    
por cipricus 18.11.2012 / 23:33
0
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

Este mostra sample.pdf.txt .

Eu tentei usar este, como o user2357111317 sugere e também incluo -layout para preservar o layout do texto

for file in *.pdf; do pdftotext -layout "$file"; done
    
por hinky 21.05.2018 / 13:13