В сценарии оболочки лучше использовать cmp
от GNU diffutils. Он сравнивает данные для вас и может даже пропустить смещения - ignore-initial = SKIP1: SKIP2
, поэтому вы можете запустить cmp
для каждого смещения сектора, и он завершит работу при первой разнице. находит ... что полуэффективно, но все же это МНОГО из вызовов cmp
, если вы хотите запустить его для каждого сектора ...
Вы также можете использовать grep -abo
или strings -td
, чтобы найти возможные варианты смещения байтов для вас, но это зависит от фактического шаблона, который вы ищете. Преимуществом для них будет один вызов программы для поиска всего объекта, а не тысячи вызовов (по одному на сектор).
Если вам не удастся найти утилиту командной строки, которая выполняет всю работу за вас, вы не сможете превзойти небольшой сценарий C / Go / Python, который просматривает все это за один раз в соответствии с вашими требованиями .. .
Ваша идея сценария, конечно, тоже работает, но это просто означает вызов dd
(или read
, или что-то еще) снова внутри цикла для чтения одного блока стандартного ввода за раз, это, вероятно, медленнее, чем раньше ...