Batch converter arquivos .doc para .txt (texto ascii simples) e / ou .html de forma recursiva em pastas e subpastas, Windows e Mac?

2

Existe uma ferramenta para fazer isso. Eu vi algumas ferramentas Python / Java para automatizar o OpenOffice, mas alguém roteirizou isso de forma confiável para fazer mais de um arquivo, e recorreu a uma árvore de pastas / diretórios com arquivos .doc, colocando os arquivos .txt e .html convertidos em seguida para o arquivo original em sua localização.

    
por therobyouknow 02.03.2011 / 17:12

3 respostas

1

@slhck sua solução quase funciona, mas a saída é para o display / STDOUT com todos os arquivos concatenados juntos. Eu preciso de arquivos .txt individuais como saída. A razão é que não estamos contabilizando o nome do arquivo na saída.

Para contornar a necessidade de percorrer uma hierarquia de pastas Se eu usar o Windows procure por * .doc e copie os resultados para uma pasta para colocá-los todos em uma pasta achatada, posso inicializar no Ubuntu e executar o seguinte. / p>

(Eu tenho um pedaço de código de recursão de arquivo / pasta em algum lugar que eu vou cavar e adicionar para mais tarde, se o tempo.) Mas por enquanto apenas achatando a hierarquia de arquivos como acima é bom o suficiente.

A propósito, o catdoc funciona melhor que o antiword porque o antiword reclama que alguns arquivos não são documentos do Word, estes tendem a ser arquivos .doc com formatação e blocos de texto organizados como frames dentro do doc. O catdoc parece converter todos os meus documentos.

#!/usr/bin/perl -w

 use File::Basename;

 my $okFiles = "";
 my $couldntGet = "";

 @files = <*>;
 foreach $file (@files) 
 {
   if ( $file =~ m/\.doc/ )
   { 
     my ( $filenameOnly, $dir, $ext ) = fileparse($file, qr/\.[^.]*/);
     if ( ( defined $filenameOnly ) && ( defined $ext ) )
     {
       $okFiles .= "file: ".$file." filename only:".$filenameOnly." extension:".$ext."\n";

       system( "catdoc \"".$file."\" > \"".$filenameOnly.".txt\"" );
     }
     else
     {
       $couldntGet .= "*file: ".$file." - couldn't get filename only and extension\n";
     }
   }

   print $okFiles;

   print $couldntGet;
 } 
    
por 06.03.2011 / 16:49
3

Linux / Unix

Existem duas ferramentas do Unix que eu conheço:

  • catdoc
  • antiword

Você pode usar apenas find para percorrer a pasta recursivamente

find . -name "*.doc" -exec <command> {} \;

Em que <command> é a ação apropriada para converter o arquivo .doc em um arquivo .txt, usando catdoc ou antiword .

Mac OS X

Você pode usar as mesmas ferramentas, mas terá que instalá-las usando, por exemplo, Homebrew . Para fazer isso, insira no Terminal:

ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

E então:

brew install catdoc
brew install antiword
    
por 02.03.2011 / 17:19
0

O catdoc e o antiword têm suporte de formato de arquivo muito limitado, a versão mais recente que eles entendem é o Word 2000.

Eu sei que você pode escrever no script do LibreOffice para converter qualquer arquivo que entenda em texto ou pdf (isso é o que o MediaGoblin faz), mas eu não sei exatamente como fazer isso.

    
por 27.08.2013 / 13:17