Recuperar nomes de arquivos para doc e RTF

1

Eu tenho algumas centenas de arquivos .doc e .rtf, que perderam seus nomes originais após a recuperação de um disco rígido danificado. Basicamente, eles se parecem com isso:

f132765720.rtf
f136246056.rtf
f146124320.doc
f147595288.docx
f131673632.rtf

Eu posso ler os arquivos sem nenhum problema. Como posso recriar nomes de arquivos significativos do conteúdo dos arquivos no Linux?

Exemplo de arquivo: link

    
por sanmai 17.07.2013 / 03:57

2 respostas

3

O script abaixo encontrará todos os arquivos .docx e .rtf no diretório atual e os renomeará como first_few_words.rtf ou docx . Primeiro você precisa instalar o catdoc . No Debian e seus derivados você pode fazer isso com

sudo apt-get install catdoc 

Curiosamente, catdoc me dá um segfault quando eu tento em um docx , então use docx2txt para os arquivos doc:

sudo apt-get install docx2txt

Quando tiver catdoc e docx instalado, cd no diretório que contém seus arquivos e execute:

for file in *rtf; do 
  name=$(catdoc "$file" | grep . | head -1 | sed 's/ /_/g') &&
  mv "$file" "$name".rtf;
done
for file in *docx; do 
  name=$(docx2txt < "$file" | grep . | head -1 | sed 's/ /_/g') &&
  mv "$file" "$name".docx;
done

CUIDADO: Isto irá apagar os arquivos originais, certifique-se de fazer um backup primeiro, apenas no caso.

EXPLICAÇÃO: ambos os utilitários convertem docx ou rtf em texto, seleciono a primeira linha não vazia desse texto, converto espaços em sublinhados (isso facilitará sua vida a longo prazo) e renomeie os arquivos em conformidade.

    
por 17.07.2013 / 05:05
1

Para a resposta fornecida pelo @terdon eu gostaria de acrescentar que eu achei que se eu prefixar cada nome de arquivo com uma data de criação, seria uma grande ajuda.

A data dos arquivos .docx pode ser encontrada desta forma:

unzip -p example.docx | grep dcterms:created |
    grep -o [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] | head -1

Para arquivos .doc:

antiword -x db example.doc | grep date | grep -o '[0-9-]*'

Para arquivos .rtf:

grep -o '\creatim\yr[0-9]*\mo[0-9]*\dy[0-9]*' example.rtf |
    grep -o [0-9]* | tr "\n" -
    
por 18.07.2013 / 05:20

Tags