Обычно, когда редакторы сохраняют файлы, они удаляют или обрезают до 0, освобождая таким образом выделенное пространство, а затем записывают, что выделяет новое пространство. Это приводит к тому, что файловая система помещает данные в совершенно другое физическое место. Так что ваша идея может не сработать.
Вы можете получить физическое местоположение файла с помощью filefragили hdparm --fibmap, а затем использовать ddдля непосредственного чтения этого физического местоположения. Я описал этот процесс в другом контексте здесь: /unix//a/85880/30851
В вашем случае, скорее всего, вам нужен общий подход для поиска текстовых данных ... что-то вроде:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings будет искать последовательные данные ASCII (также поддерживает некоторые другие кодировки, не уверен насчет UTF-8. Если это код или английский, вам это не понадобится), а также выведет смещение в том месте, где оно было найдено.
text snippetдолжен быть точным, уникальным образцом текста, который вы помните, находясь в той части файла, которую вы ищете [в одну строку]. (Если вы точно не знаете, вместо этого вы можете использовать регулярные выражения.)
-n 12это минимальная длина, которую stringsнужно искать. 12должна быть длина вашей text snippet. Этот параметр является необязательным, если он предусмотрен, что может помочь strings | grepнемного быстрее.
Чтение всего раздела займет много времени, но в случае успеха у вас будет смещение, к ddкоторому вы можете обратиться, чтобы захватить общую область, а затем удалить вещи, которые не принадлежат.
Я ничего не делал в этом каталоге с тех пор
Если ваш каталог не является точкой монтирования ... большинство файловых систем на самом деле не резервируют место "на каталог", поэтому ... любая запись во всей файловой системе может перезаписать бит, который вы ищете. В ситуации восстановления данных вы обычно переключаете все это в режим только для чтения.
stringsбудет только найти некоторые части файла, если вам не повезло.