Jak uzyskać tylko pierwsze dziesięć bajtów pliku binarnego

80

Piszę skrypt bash, który musi pobrać nagłówek (pierwsze 10 bajtów) pliku, a następnie w innej sekcji uzyskać wszystko oprócz pierwszych 10 bajtów. Są to pliki binarne i prawdopodobnie będą miały znaki \0„i \n” w ciągu pierwszych 10 bajtów. Wygląda na to, że większość narzędzi działa z plikami ASCII. Jaki jest dobry sposób na wykonanie tego zadania?

Użytkownik1
źródło
1
Dla każdego, kto potrzebuje wyjścia szesnastkowego, zobacz tę odpowiedź unix.stackexchange.com/a/10882/103618
Alwin Kesler

Odpowiedzi:

145

Aby uzyskać pierwsze 10 bajtów, jak już wspomniano:

head -c 10

Aby uzyskać wszystkie oprócz pierwszych 10 bajtów (przynajmniej z GNU tail):

tail -c+11
psmears
źródło
3
Tak. ddPomysł mi się spodobał, ale ta opcja nie wymaga zmiany rozmiaru bufora, więc działa dobrze z dużymi plikami. Dzięki.
Użytkownik 1,
42

head -c 10 robi tutaj właściwą rzecz.

księżycowy cień
źródło
9
Ciekawe, że ta odpowiedź była pierwsza, jest poprawna, ale inni mają znacznie więcej pozytywnych głosów.
robert
34

Możesz użyć ddpolecenia, aby skopiować dowolną liczbę bajtów z pliku binarnego.

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1
Mark Okup
źródło
1
To działa, ale jest dość powolne. Bs z 10 zabija te ogromne pliki. Czy istnieje szybszy sposób na pominięcie pierwszych dziesięciu bajtów? Wydaje się to takie proste.
Użytkownik 1,
dd nie jest wiarygodne. Może odczytać mniej bajtów niż żądano z wielu różnych powodów.
ceving
@ceving czy możesz wymienić przynajmniej jeden z tych powodów? Nie jestem pewien, czy ci wierzę.
Mark Ransom
Poniższy przykład wyświetla 1 zamiast 2:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
ceving
Wyjaśnienie jest tu i tutaj
ceving