Где Google Chrome сохранил временные файлы PDF?

Я задавался вопросом, где Google Chrome сохраняет документы PDF, которые он открывает в самом браузере. Я знаю, что они удалены, если мы не сохраняем их и закрываем браузер.

Я изучил хром временная папка в ~/.cache/google-chrome, но не мог найти PDF там.

6
задан 3 February 2015 в 06:27

2 ответа

Это находится в том каталоге, хорошо. Просто использует случайную строку для имен файлов. Проверьте его:

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
6
ответ дан 23 November 2019 в 07:49

Каталог кеша Google Chrome $HOME/.cache/google-chrome/Default/Cache в Linux содержит один файл для каждой записи кеша с именем <16 шестнадцатеричных символов>_0 в "простой формат записи":

  • 20-байтовый SimpleFileHeader
  • ключ (т.е. URI)
  • полезная нагрузка (необработанное содержимое файла, т.е. PDF в нашем случае)
  • SimpleFileEOF запись
  • Заголовки HTTP
  • SHA256 ключа (необязательно)
  • SimpleFileEOF запись

Поэтому вы не можете просто использовать файл для определения типа файла (он просто обнаружит данные) , но должен искать заголовок PDF. Это перечислит все PDF-файлы в каталоге кэша:

grep -Rl '%PDF' $HOME/.cache/google-chrome/Default/Cache

Примечание: Это может привести к ложным срабатываниям, если строка %PDF появится где-то в файле, который не является PDF

. Примечание. Если вы не используете профиль Chrome по умолчанию, замените По умолчанию именем профиля, например Профиль 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 <кэш-файл>

2
ответ дан 5 December 2020 в 23:28

Другие вопросы по тегам:

Похожие вопросы: