2010-12-10 82 views
52

J'écris un script bash qui doit obtenir l'en-tête (les 10 premiers octets) d'un fichier et ensuite dans une autre section obtenir tout sauf les 10 premiers octets. Ce sont des fichiers binaires et auront probablement \0 et \n dans les 10 premiers octets. Il semble que la plupart des utilitaires fonctionnent avec des fichiers ASCII. Quel est un bon moyen d'accomplir cette tâche?Comment obtenir seulement les dix premiers octets d'un fichier binaire

Répondre

84

Pour obtenir les 10 premiers octets, comme déjà noté:

head -c 10 

Pour obtenir tous, mais les 10 premiers octets (au moins avec GNU tail):

tail -c+11 
+2

Oui. J'ai aimé l'idée 'dd' mais cette option ne nécessite pas de changement de la taille de la mémoire tampon, donc cela fonctionne bien avec les gros fichiers. Merci. – User1

26

head -c 10 fait la bonne chose ici.

+3

Il est intéressant que cette réponse était la première, c'est correct, mais les autres ont beaucoup plus de votes. – robert

28

Vous pouvez utiliser la commande dd pour copier un nombre arbitraire d'octets à partir d'un fichier binaire.

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

Cela fonctionne mais c'est assez lent. Le bs de 10 tue ces énormes fichiers. Existe-t-il un moyen plus rapide d'ignorer les dix premiers octets? Cela semble si simple. – User1