如何区分两个不同的开放文档文本文件 (odt) 中嵌入的样式?
例如,人员A创建一个文件并修改标题/标题样式,将文档存储在共享驱动器中。 B对样式进行了修改并另存为,但修改很微妙。哪个工具可以让我知道修改了哪种样式?
需要“解压”odt 文件的解决方案是有效的。
仅仅比较 styles.xml 是行不通的,因为所有内容都在一行上,如果它们不严格相同,它会认为所有内容都已更改。
答案1
#!/bin/bash
a="$1"
b="$2"
diff -u <(unzip -p "$a" styles.xml | xml2) \
<(unzip -p "$b" styles.xml | xml2)
xml2
将 XML 文件转换为适合使用面向行的工具(例如grep
、sed
、cut
、 当然还有diff
. AFAICT,它是废弃软件(参见xml2 去哪儿了?)但它仍然是非常有用的废弃软件,并且仍然由一些发行版打包(例如sudo apt-get install xml2
在 Debian 及其衍生版本上)。
注意:.odt 多年来发生了很大变化,因此某些版本的 .odt 文件可能会将样式保留在 zip 文件中的不同文件(或子目录)中。如果您遇到其中一个,则必须修改脚本以首先检查每个 .odt 文件(例如使用unzip -vl
)以找出它的样式文件类型及其位置。
就我个人而言,我不会在 bash 或任何其他 shell 中做比上面的脚本更复杂的事情。我倾向于使用 perl 的ODF::lpOD或 DIY 与存档::Zip以及 perl 的 XML 处理模块之一(也许XML::简单)。或许算法::差异也。
顺便说一句,如果您不知道.odt
文件只是一个 zip 文件,其中包含 XML、图像和其他文件,位于 zip 的顶级目录或子目录中。