o seguinte converterá todos os arquivos no diretório atual:
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Sam
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. "
o seguinte converterá todos os arquivos no diretório atual:
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Sam
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
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.
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!
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