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?


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

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.