खाली टार आर्काइव कैसे प्राप्त करें?


24

मैं एक RPM बना रहा हूँ, जिसमें सब कुछ .spec फ़ाइल में समाहित है (मत पूछो :-)) rpmbuild को "स्रोत" फ़ाइल की आवश्यकता होती है, इसलिए मैं एक खाली टार फ़ाइल बनाने की कोशिश कर रहा था। हालाँकि, अगर मैं कोई फ़ाइल नाम नहीं देता, तो टार की शिकायत करता है:

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

मैं वास्तव में खाली टार फ़ाइल कैसे बनाऊं?


इसका उत्तर यहां पहले दिया गया था: superuser.com/questions/133186/…
ऋखुक

3
वास्तव में, @ राहुक, यह नहीं है। वह पोस्ट वह है जो फ़ाइल नाम सूचीबद्ध करना भूल गया है, और उत्तर ने उन्हें यह महसूस करने में मदद की कि उन्हें एक और तर्क पारित करने की आवश्यकता है, जिसके परिणामस्वरूप एक गैर-खाली संग्रह है। यही कारण है कि मुझे लगता है कि सवाल का शीर्षक बदलकर, और इस सवाल है, जो बनाया है करता है इस सवाल का जवाब क्या है कि प्रश्न के शीर्षक पूछ रहा था।
सीन रिफ़्स्चाइडर

जवाबों:


24

आप रिक्त संग्रह बनाने के लिए GNU और BSD टार को मजबूर कर सकते हैं:

tar -cf tarfilename.tar -T /dev/null

फिर, 'f' विकल्प अंतिम होना चाहिए, क्योंकि यह फ़ाइल नाम निर्दिष्ट करता है। आप T नाम से एक संग्रह बनाने जा रहे हैं, लेकिन यह वैसे भी टारफिलेंमे.टेयर फ़ाइल गुम होने पर त्रुटि करेगा।
लोर्निक्स

1
खाली टार बनाने का एक कारण: स्क्रिप्टेड टार क्रिएशन। चरण 1: टार बनाएं। चरण 2: एक-एक करके फाइलें जोड़ें। आप ऐसा कर सकते हैं "अगर पहली फ़ाइल है तो फिर बनाएं और फिर आगे बढ़ें" लेकिन यह उतना आसान नहीं है।
17

4
@dpk: अगर मैं समझ गया कि आप क्या कह रहे हैं, तो आप हमेशा सिर्फ ऐपेंड का उपयोग क्यों नहीं करते? यदि यह पहले से मौजूद नहीं है, तो परिशिष्ट टार फाइल बनाएगा, इसलिए आपको यह जाँचने की आवश्यकता नहीं है कि यह पहली फ़ाइल है, बस संलग्न करें और यदि यह पहली फ़ाइल है तो इसे बनाएगा।
सीन रिफ़्शिनडर

1
@SeanReifschneider ऐसा लगता है कि यह ठीक काम करेगा। अच्छा लगा।
dpk

1
@SeanReifschneider: एप संकेत मोड के लिए +1, पहली फ़ाइल के लिए संग्रह बनाता है अगर यह डिस्क पर पहले से ही नहीं है। मैं एक स्क्रिप्ट में एपेंड मोड में टार को निष्पादित करने के लिए कमांड का उपयोग कर रहा हूं ताकि पहले हाथ से संग्रह फ़ाइल बनाने की आवश्यकता न हो।
गुरुग्राम

8

बीएसडी: tar cvf empty.tar --from-file /dev/null

GNU (Linux): tar cvf empty.tar --files-from /dev/null

सोलारिस: tar cvf empty.tar -I /dev/null


अंत में कुछ ऐसा है जो सोलारिस में काम करता है !! बहुत बहुत धन्यवाद
AJPerez

4

एक खाली टार फाइल केवल एक फाइल है जिसमें 10240 NUL बाइट्स हैं। इसलिए एक खाली टार फाइल बनाने के लिए, आपको tarइसकी आवश्यकता भी नहीं है, बल्कि इसके लिए इनका उपयोग कर सकते हैं:

$ head --bytes=10240 /dev/zero > empty.tar
$ truncate --size=10240 empty.tar
$ fallocate --length=10240 empty.tar
$ dd if=/dev/zero bs=10240 count=1 iflag=fullblock > empty.tar
$ dd if=/dev/zero bs=1 count=10240 > empty.tar

DK के उपयोग के बारे में आपके संकेत के लिए @KamilMaciorowski धन्यवाद! मैंने कुछ नया सीखा! सही प्रश्न का उत्तर देने के बारे में: शीर्षक वास्तव में "टार को मजबूर करने के लिए कैसे पूछता है" लेकिन जब प्रश्न पाठ पढ़ा जाता है, तो यह स्पष्ट हो जाता है कि ओपी वास्तव में एक खाली टार फाइल चाहता है और यह कोई फर्क नहीं पड़ता कि कैसे।
जोश

मैंने आगे बढ़कर प्रश्न संपादित किया।
कामिल मैकियोरोस्की

3

मैं किसी एकल फ़ाइल को संग्रहीत करके एक रिक्त संग्रह बनाने में सक्षम था, फिर संग्रह से फ़ाइल को हटा रहा था।

tar cf empty.tar somefile                   # creates archive
tar --delete -f empty.tar somefile          # remove the file
tar tf empty.tar                            # list contents of archive

यह मेरे लिए काम करता है।


2
मैं यह सत्यापित कर सकता हूं कि GNU टार के साथ यह सभी NUL वर्णों की अपेक्षित 10K फ़ाइल का उत्पादन करेगा।
सीन रिफ़्स्चाइडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.