恢复 doc 和 RTF 的文件名

恢复 doc 和 RTF 的文件名

我有数百个 .doc 和 .rtf 文件,在从损坏的硬盘恢复后,这些文件丢失了原来的名称。它们基本上看起来像这样:

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

我可以毫无问题地读取文件。如何在 Linux 中根据文件内容重新创建有意义的文件名?

示例文件:https://dl.dropboxusercontent.com/u/41225253/example.rtf

答案1

下面的脚本将查找当前目录中的所有.docx和文件,并将其重命名为或。首先你需要安装.rtffirst_few_words.rtfdocxcatdoc. 在 Debian 及其衍生产品中,你可以使用

sudo apt-get install catdoc 

奇怪的是,当我在我拥有的catdoc设备上尝试时出现了段错误,因此改用 doc 文件:docxdocx2txt

sudo apt-get install docx2txt

catdoc安装完成后docxcd进入包含文件的目录并运行以下命令:

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

警告:这将删除原始文件,请务必先备份,以防万一。

说明:两个实用程序都将 转换docxrtf文本,然后我选择该文本的第一个非空行,将空格转换为下划线(从长远来看,这将使您的生活更轻松)并相应地重命名文件。

答案2

对于@terdon 提供的答案,我想补充一点,我发现如果在每个文件名前加上创建日期,那将会很有帮助。

对于 .docx 文件,可以通过以下方式找到日期:

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

对于 .doc 文件:

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

对于 .rtf 文件:

grep -o '\\creatim\\yr[0-9]*\\mo[0-9]*\\dy[0-9]*' example.rtf |
    grep -o [0-9]* | tr "\n" -

相关内容