问题陈述:
给定一个具有任意名称且扩展名可能不正确的文件,如何以编程方式和/或使用命令行工具确定它是否是 LaTeX 文件?
语境:
我当时正在使用 ArXiV 中的数据挖掘源文件进行一些业余 ML 工作,但遇到了一个问题。
源文件在 amazon s3 中被打包为大的 tar.gz 文件,你可以付费下载并使用 tar -xvf 解压,
解压后,您将获得一个文件夹结构
FolderNameWithMonth/
file1.gz
file2.gz
file3.pdf
file4.gz
file5.pdf
...
因此,基本上,当有人将预印本上传到 ArXiV 时,如果他们只上传 pdf,那么他们的文件将是上述文件夹中的 pdf。如果他们上传一组文件(source.tex、图像等...),则会将其压缩到 gzip 中。
但问题是,我上面列出的一些 gzip 文件实际上根本不是 gzip 文件!它们只是恰好被命名为“filename.gz”,如果您用记事本(或您选择的任何其他文本编辑器)打开它们,您会惊讶地发现它们实际上是 LaTeX 文件。它们只是被错误地命名为 .gz 扩展名。
所以这引出了我们的问题,如何通过编程来清除这里的 gzip 冒名顶替者(即检查它们的内容是否是秘密有效的 LaTeX,因此不需要解压缩)。
解决方案的一些想法:
给定一个文件,你可以尝试解压它,如果失败,则尝试编译它(我应该使用什么编译器?),如果也失败,则该文件可能是我尚未考虑过的其他奇怪格式。但是,如果你有很多文件,则编译每个文件是一项非常昂贵的操作
是否有可以搜索的关键词?我原本想将文件扫描为字符串并进行查找,
\end{document}
但结果发现普通 gzip 有时也可能在文本中包含该关键词,因此这种方法没有我所希望的那么有效。向 arxiv 发送愤怒的电子邮件,要求他们正确标记文件扩展名,但他们已经压力很大,而且薪水很低,所以这可能不是一个有效的策略。