Як отримати лише перші десять байт двійкового файлу


80

Я пишу скрипт bash, який повинен отримати заголовок (перші 10 байт) файлу, а потім в іншому розділі отримати все, крім перших 10 байт. Це двійкові файли, які, ймовірно, матимуть символи \0\n' протягом перших 10 байт. Здається, що більшість утиліт працюють з файлами ASCII. Який хороший спосіб досягти цього завдання?


1
Для тих, хто потребує шістнадцяткового виводу, дивіться цю відповідь unix.stackexchange.com/a/10882/103618
Алвін Кеслер,

Відповіді:


144

Щоб отримати перші 10 байтів, як уже зазначалося:

head -c 10

Щоб отримати всі, крім перших 10 байт (принаймні з GNU tail):

tail -c+11

3
Так. Мені сподобалась ddідея, але цей параметр не вимагає зміни розміру буфера, тому він добре працює з величезними файлами. Дякую.
Користувач1

42

head -c 10 робить тут правильно.


9
Цікаво, що ця відповідь була першою, вона є правильною, але інші мають набагато більше голосів.
Роберт,

34

За допомогою ddкоманди можна скопіювати довільну кількість байтів із двійкового файлу.

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1

1
Це працює, але це досить повільно. Bs 10 вбиває ці величезні файли. Чи є швидший спосіб пропустити перші десять байт? Це здається так просто.
Користувач1

dd не є надійним. Він може читати менше байтів, ніж запитували з багатьох різних причин.
розчарування

@ceving не могли б ви згадати хоча б одну з цих причин? Я не впевнений, що вірю тобі.
Mark Ransom

У наведеному нижче прикладі друкується 1 замість 2:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
закінчення

Пояснення тут і тут
закінчується
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.