बाइनरी फ़ाइल के केवल पहले दस बाइट्स कैसे प्राप्त करें


80

मैं एक बैश स्क्रिप्ट लिख रहा हूं, जिसमें किसी फ़ाइल के हेडर (पहले 10 बाइट्स) प्राप्त करने की आवश्यकता होती है और फिर पहले 10 बाइट्स को छोड़कर दूसरे सेक्शन में सब कुछ मिलता है। ये बाइनरी फ़ाइलें कर रहे हैं और संभावना होगा \0की और \nपहले 10 बाइट्स भर 'है। ऐसा लगता है कि अधिकांश उपयोगिताओं ASCII फ़ाइलों के साथ काम करती हैं। इस कार्य को प्राप्त करने का एक अच्छा तरीका क्या है?


1
हेक्स आउटपुट की आवश्यकता के लिए किसी को भी यह उत्तर देखें unix.stackexchange.com/a/10882/103618
Kesler

जवाबों:


145

जैसा कि पहले ही उल्लेख किया गया है, पहले 10 बाइट्स प्राप्त करने के लिए:

head -c 10

सभी प्राप्त करने के लिए लेकिन पहले 10 बाइट्स (कम से कम जीएनयू के साथ tail):

tail -c+11

3
हाँ। मुझे यह ddविचार पसंद आया लेकिन इस विकल्प को बफर आकार में बदलाव की आवश्यकता नहीं है इसलिए यह बड़ी फ़ाइलों के साथ अच्छी तरह से काम करता है। धन्यवाद।
यूजर 1


34

आप ddबाइनरी फ़ाइल से बाइट्स की एक मनमानी संख्या की प्रतिलिपि बनाने के लिए कमांड का उपयोग कर सकते हैं ।

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

1
यह काम करता है लेकिन यह काफी धीमा है। 10 की bs इन विशाल फाइलों को मार रही है। क्या पहले दस बाइट्स को छोड़ने का एक तेज़ तरीका है? यह इतना आसान लगता है।
यूजर 1

dd विश्वसनीय नहीं है। यह कई अलग-अलग कारणों से अनुरोध की तुलना में कम बाइट्स पढ़ सकता है।
15:22 बजे

@ceving आप उन कारणों में से कम से कम एक का उल्लेख कर सकते हैं? मुझे यकीन नहीं है कि मुझे आप पर विश्वास है।
मार्क रैनसम

निम्नलिखित उदाहरण 2 के बजाय 1 प्रिंट करता है:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
छत

स्पष्टीकरण यहाँ और यहाँ है
छत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.