2015-10-07 4 views
8

क्या .tar फ़ाइल बनाने का कोई तरीका है जो इसकी फ़ाइलों/निर्देशिकाओं के लिए एटिम/सीटाइम/एमटाइम के मानों को छोड़ देता है?एक टैर फ़ाइल कैसे बनाएं जो इसकी सामग्री के लिए टाइमस्टैम्प को छोड़ दे?

हम ऐसा क्यों करना चाहते हैं?

हमारे पास हमारी निर्माण प्रक्रिया में एक कदम है जो कलाकृतियों की एक निर्देशिका उत्पन्न करता है जो एक टैरिफाइल में पैक हो जाता है। हम उम्मीद करते हैं कि निर्माण को बेवकूफ़ बनाने के लिए - एक ही इनपुट दिए जाने पर, यह बिल्कुल प्रत्येक बार एक ही फाइल/आउटपुट उत्पन्न करता है।

आदर्श रूप से, हम बिटवाई क्लीन बिल्डों में बेवकूफ़ों को भी पसंद करना चाहते हैं, ताकि हम लगातार निर्माण के हैंश का उपयोग करके यह जांच सकें कि कुछ भी नहीं बदला है। लेकिन क्योंकि प्रत्येक प्रविष्टि के लिए टैर फाइलों में टाइमस्टैम्प (एटीम/सीटाइम/एमटाइम) शामिल होता है, उस बिल्ड चरण द्वारा बनाई गई टैर फाइलें पिछले रन के समान नहीं होती हैं, भले ही संग्रह के अंदर प्रत्येक फ़ाइल की सामग्री बिटवाई समान है।

क्या कोई टैरिफाइल उत्पन्न करने का कोई तरीका है जो इसकी प्रविष्टियों के टाइमस्टैम्प को छोड़ देता है, ताकि संग्रह उत्पन्न करने वाला चरण बिटवाईड idempotent हो सकता है? (हम अन्य फ़ाइल मेटाडेटा का लाभ उठाना चाहते हैं जो tar संरक्षित करता है, जैसे फ़ाइल मोड बिट्स और सिम्लिंक।)

+0

क्या आपको कभी इसका पूरा जवाब मिला? मैं भी वही काम करना चाहता हूं, यहां एक प्रश्न में पूछा गया: https://stackoverflow.com/questions/45734702/tar-preserving-only-file-names-contents-and-executable-bit?noredirect=1#comment78427625_45734702 मैं यह भी सुनिश्चित करना चाहता हूं कि उपयोगकर्ता, समूह और अनुमतियां संग्रहीत नहीं हैं। क्या इसके बारे में जागरूक होने के लिए कुछ और है? –

+0

@TomEllis, यदि आप अनुमतियों के सटीक नियंत्रण चाहते हैं और संग्रहीत नहीं हैं, तो मैं पाइथन 'टैरफ़ाइल 'मॉड्यूल के साथ कुछ कस्टम बनाने पर विचार करता हूं। –

उत्तर

8

जीएनयू टार एक --mtime तर्क है, जो संग्रह में एक निश्चित तिथि की दुकान के बजाय करने के लिए इस्तेमाल किया जा सकता है एक फ़ाइल के वास्तविक mtime:

tar --mtime='1970-01-01' input ... 

जब gzip से एक टारबॉल संपीड़ित करने, यह भी आवश्यक को रोकने के लिए -n निर्दिष्ट करने के लिए है टैर आर्काइव का नाम और टाइमस्टैम्प संग्रहीत होने से:

tar --mtime='1970-01-01' input ... | gzip -n >input.tar.gz 
+0

मैकोज़ में यह कैसे किया जा सकता है? मुझे '--mtime' – mljrg

+3

@mljrg नहीं मिल रहा है: मैकोज़ पर मानक टैर बीएसडी आधारित है, और बीएसडी टैर जीएनयू टैर से अलग है। जीएनयू टैर स्थापित करने के लिए, यदि आप होमब्रू का उपयोग करते हैं, तो आप 'gnu-tar' इंस्टॉल कर सकते हैं जो जीएनयू टैर को 'गटर' के रूप में उपलब्ध कराता है। – Mickalot

+0

@ मिकलोट धन्यवाद! – mljrg

-2

हम टार फ़ाइल को उसमें शामिल किए बिना टैर फ़ाइल बना सकते हैं।

1) संपीड़न और टाइमस्टैम्प

tar -cf file_name.tar file_name 

2 बिना टार फ़ाइल बनाएँ) संपीड़न के साथ और टाइमस्टैम्प

tar -cf file_name | gzip -n > file_name.tar.gz 

3) वैकल्पिक रास्ता

GZIP=-n tar -czf file_name.tar.gz file_name 

नोट के बिना टार फ़ाइल बनाएँ: '-n' टाइमस्टैम्प और नाम नहीं जोड़ देगा

4) टार फ़ाइल

tar -xf file_name.tar and tar -xzf file_name.tar.gz 

सत्यापित करने के लिए आप की तरह कर सकते हैं निकालने के लिए इस

file file_name.tar or file_name.tar.gz 
output = file_name.tar.gz: gzip compressed data, from Unix 
+1

'tar -c' में संग्रह में संशोधन समय (टाइमस्टैम्प) शामिल है। –

संबंधित मुद्दे