我想知道 Google Chrome 会将浏览器中打开的 PDF 文档保存在哪里。我知道如果我们不保存并关闭浏览器,这些文档就会被删除。
我查看了 ~/.cache/google-chrome 的 chrome 临时文件夹,但在那里找不到任何 pdf。
答案1
笔记:由于 Chrome 磁盘缓存格式已经改变
没错,它就在那个目录中。只需使用随机字符串作为文件名。测试一下:
find ~/.cache/google-chrome -type f -exec file {} + | grep PDF
例如:
$ find .cache/google-chrome/ -type f -exec file {} + | grep PDF
.cache/google-chrome/Default/Cache/f_004bf0: PDF document, version 1.5
.cache/google-chrome/Default/Cache/f_004c01: PDF document, version 1.4
答案2
Linux 上的Google Chrome 缓存目录$HOME/.cache/google-chrome/Default/Cache
包含一个文件,每个缓存条目<16 char hex>_0
名为“简单输入格式”:
- 20 字节 SimpleFileHeader
- 密钥(即 URI)
- 有效载荷(原始文件内容,即本例中的 PDF)
- SimpleFileEOF 记录
- HTTP 标头
- 密钥的 SHA256(可选)
- SimpleFileEOF 记录
因此,您不能简单地使用file
来确定文件类型(它只会检测data
),而必须搜索 PDF 标头。这将列出缓存目录中的所有 PDF:
grep -Rl '%PDF' $HOME/.cache/google-chrome/Default/Cache
笔记:%PDF
如果字符串出现在非 PDF 文件中的某个地方,则可能会产生误报
笔记:如果您没有使用默认的 Chrome 配置文件,请替换Default
为配置文件名称,例如Profile 1
。
evince
将会直接读取缓存文件,而不必剥离标题。
如果您确实想提取原始 PDF,请将以下脚本保存为extractpdf.py
:
def main(cachefile):
with open(cachefile, 'rb') as f:
s = f.read()
with open(cachefile + '.pdf', 'wb') as f:
f.write(s[s.find(b'%PDF'):s.rfind(b'%%EOF')+5])
if __name__ == '__main__':
import sys
main(sys.argv[1])
并称之为python3 extractpdf.py <cache file>