2011-02-10 8 views
7

मुझे आश्चर्य है कि यह संभव है कि एसओ, Google, बिंग और linuxquestions.org पर कई खोजों ने कुछ भी नहीं किया है।फ़ाइल के अंत से मेल खाने के लिए आप एक जादू फ़ाइल परीक्षण पैटर्न कैसे लिखते हैं?

मुझे /usr/share/magic में स्थित जादू पैटर्न को विस्तारित करने में रुचि है (file(1) उपयोगिता द्वारा उपयोग की गई) फ़ाइल के अंत में या उसके पास डेटा के आधार पर फ़ाइलों को पहचानने के लिए। मैं फ़ाइल की शुरुआत के लिए, साथ ही साथ शुरुआत में फ़ाइल में मनमाने ढंग से ऑफसेट के लिए ऐसा करने में सक्षम हूं।

मैन पेज कुछ मानक उपयोग मामलों को चित्रित करने का एक बहुत अच्छा काम करता है; दुर्भाग्यवश, ऐसा प्रतीत नहीं होता है कि शुरुआत के विपरीत अंत में सूचकांक का एक तरीका है। एकमात्र कामकाज मैं साथ आया था tac और/या lreverse का उपयोग करके एक स्क्रिप्ट किए गए दृष्टिकोण को अपनाना था, लेकिन ऐसा लगता है कि ये बाइनरी डेटा के लिए असभ्य हो सकते हैं।

इसके अलावा, मैं किसी भी अन्य स्क्रिप्टेड प्रसंस्करण से बचना चाहता था - मुझे लगता है कि यह सही फ़ाइल जादू के साथ करने योग्य होना चाहिए। कोई विचार?

उत्तर

5

यह संभव नहीं है। file(1) भी पाइप के साथ काम करने के लिए डिज़ाइन किया गया है। आप फाइल के अंत तक पहुंचने के लिए पाइप पर lseek(2) का उपयोग नहीं कर सकते। पूरी फ़ाइल को तब तक पढ़ना जब तक कि अंत बहुत धीमा न हो (और file(1) तेजी से होने की कोशिश करता है) और यदि यह वास्तव में एक पाइप से पढ़ रहा है, तो यह कभी भी फ़ाइल के अंत का सामना नहीं कर सकता है, जो इससे भी बदतर होगा।

प्रलेखन के लिए, ओपन सोर्स सॉफ्टवेयर के मामले में, स्रोत कोड स्वयं परम दस्तावेज है। यदि आप इस तरह के मामले में फंस जाते हैं, तो हमेशा देखना एक अच्छा विचार है। src/magic.c में file_or_fd() फ़ंक्शन सुराग देता है। स्रोत, ल्यूक का प्रयोग करें! ;-)

आपके विशिष्ट मामले में, मेरे पास फ़ाइल प्रारूप में दूसरा स्वरूप होगा, और यदि इसे वास्तव में file(1) द्वारा पार्स नहीं किया जा सकता है, तो एक छोटी पर्ल या पायथन स्क्रिप्ट को चाल चलनी चाहिए। सौभाग्य!

+0

मैक, इस स्पष्ट और संक्षिप्त स्पष्टीकरण के लिए धन्यवाद। मुझे नहीं पता क्यों, लेकिन स्रोत कोड को देखने के लिए यह मेरे साथ कभी नहीं हुआ। शायद यह सबसे अच्छा सुझाव है जिसे मैं प्राप्त कर सकता था! धन्यवाद, -Arj – jayce

+0

@Ari: आपका स्वागत है! –