2015-10-31 14 views
0

Может кто-нибудь предложить обходной путь для этой ошибки:Как заставить xxd -r работать с выходом xxd -i?

cat /bin/ls |xxd -g 1 -i | xxd -r 
xxd: sorry, cannot seek backwards. 

Но если вы делаете:

cat /bin/ls |xxd -g 1 | xxd -r 

Это нормально. Это ошибка?

В прошлом я смог выполнить это, но теперь мне просто интересно, существуют ли какие-либо альтернативы?

+0

Казалось бы, -i заставляет xxd хотеть искать stdin назад, что, конечно, невозможно. Возможно, он этого не делал, и более новая версия начала это делать. Трудно сказать, является ли это ошибкой или «ожидаемым поведением», но вы могли бы обойти его, используя временный файл между первой и второй командами. – kcraigie

+0

Он не хочет искать во входном потоке. Он говорит, что не может искать обратно в потоке вывода. Проблема заключается в том, что 'xxd -r' ожидает чтения формата вывода' xxd' по умолчанию, а не формата вывода 'xxd -i'. Он ожидает чтения смещений файлов и интерпретирует '0xed' как более раннее смещение, чем' 0xfa', или что-то в этом роде. –

ответ

1

Пробег: xxd -r -p. Это работает для меня:

:; cat /bin/ls | xxd -g 1 -i | xxd -r -p | md5sum - /bin/ls 
fd20b8459b80679cddf83adf58277264 - 
fd20b8459b80679cddf83adf58277264 /bin/ls