@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;
}