我有数百个 .doc 和 .rtf 文件,在从损坏的硬盘恢复后,这些文件丢失了原来的名称。它们基本上看起来像这样:
f132765720.rtf
f136246056.rtf
f146124320.doc
f147595288.docx
f131673632.rtf
我可以毫无问题地读取文件。如何在 Linux 中根据文件内容重新创建有意义的文件名?
示例文件:https://dl.dropboxusercontent.com/u/41225253/example.rtf
答案1
下面的脚本将查找当前目录中的所有.docx
和文件,并将其重命名为或。首先你需要安装.rtf
first_few_words.rtf
docx
catdoc
. 在 Debian 及其衍生产品中,你可以使用
sudo apt-get install catdoc
奇怪的是,当我在我拥有的catdoc
设备上尝试时出现了段错误,因此改用 doc 文件:docx
docx2txt
sudo apt-get install docx2txt
catdoc
安装完成后docx
,cd
进入包含文件的目录并运行以下命令:
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
警告:这将删除原始文件,请务必先备份,以防万一。
说明:两个实用程序都将 转换docx
为rtf
文本,然后我选择该文本的第一个非空行,将空格转换为下划线(从长远来看,这将使您的生活更轻松)并相应地重命名文件。
答案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" -