Найти случайно затёртый с диска исходник
В очередной (третий-четвёртый за несколько последних лет) раз затерев по неаккуратности файл с кодом (cp
не в ту сторону), на который был потрачен предыдущий час или больше, и который ещё не был закоммичен, решил что искать его с помощью dd
и grep
- занятие утомительное. Слышал тут про binwalk
, но, посмотрев описание, то ли не осилил найти способ её для этой цели использовать, то ли она и правда для другого.
Написал свою прогу в итоге: исходник.
Компилировать:
gcc -o rawsearch rawsearch.c
Синтаксис:
./rawsearch if=/dev/sda8 str=some_string_from_file
Прога найдёт на диске все текстовые блоки (внимание: если файл фрагментирован то он будет не одним блоком а несколькими, прога их сцеплять не будет), что содержат эту строку и создаст пачку файлов с названиями found-NNN
(NNN - байт где начинается) с этими текстами. Границы текстовых блоков определяются так:
static int is_binchar(char c) { return (c==127 || c>=0 && c<=6 || c>=14 && c!=27 && c<=31); }
(это символы которые по мнению проги в текстовых файлах не встречаются).
Возможно кому-то будет полезно.
Исходник максимально простой (всего 300 строк и 12кб), можно легко патчить под какие-то потребности по месту.