यह कैसे जांचा जाए कि Unix .tar.gz फ़ाइल बिना फाइल के वैध फाइल है या नहीं?


जवाबों:


121

क्या सिर्फ टारबॉल की एक सूची प्राप्त करने और आउटपुट को फेंकने के बजाय, फ़ाइल को डिकम्प्रेस करने के बजाय?

tar -tzf my_tar.tar.gz >/dev/null

टिप्पणी के अनुसार संपादित किया गया। धन्यवाद zrajm!

टिप्पणी के अनुसार संपादित करें। जमे हुए लौ धन्यवाद! यह परीक्षण किसी भी तरह से डेटा की अखंडता का अर्थ नहीं है। क्योंकि यह एक टेप अभिलेखीय उपयोगिता के रूप में डिज़ाइन किया गया था, टार के अधिकांश कार्यान्वयन एक ही फ़ाइल की कई प्रतियों की अनुमति देगा!


13
-vयदि आप आउटपुट को केवल पाइप कर रहे हैं तो क्यों उपयोग करें /dev/null?
zrajm

2
सच @zrajm लगता है कि यह मेरी मांसपेशी स्मृति में लात मार रहा है! (-:
रोब वेल्स

5
-zविकल्प भी अनावश्यक है। यह निकालने या सूची मोड में कुछ भी नहीं करता है।
22

1
पुन :: -zयह निश्चित रूप से GNU टार के साथ मामला है - क्या आप जानते हैं कि क्या यह कहीं और है (BSD, आदि)?
बेलाक्वा

2
@bobwells लेकिन क्या सफल डेटा की अखंडता को सूचीबद्ध करने में सफल अनकम्प्रेस्ड या कंटेंट फाइल होती है tar.gz? कोई समर्थन जानकारी?
फ्रोजन फ्लेम

99

आप शायद फ़ाइलों की अखंडता का परीक्षण करने के लिए gzip -t विकल्प का उपयोग कर सकते हैं

http://linux.about.com/od/commands/l/blcmdl1_gzip.htm

से: http://unix.ittoolbox.com/groups/technical-functional/shellscript-l/how-to-test-file-integrity-of-targz-1138880

Gzip फ़ाइल का परीक्षण करना भ्रष्ट नहीं है:

gunzip -t file.tar.gz

टार फ़ाइल का परीक्षण करना भ्रष्ट नहीं है:

gunzip -c file.tar.gz | tar -t > /dev/null

बैकअप के हिस्से के रूप में आप शायद बाद की कमांड को चला सकते हैं और $ मूल्य की जांच कर सकते हैं? बाद में 0 (सफलता) मान के लिए। यदि या तो टार या गज़िप में एक मुद्दा है, $? एक गैर शून्य मान होगा।


3
और bzip2 -t file.bz2bz2 फ़ाइलों के लिए।
22

4
क्या यह केवल दो आदेशों का उपयोग करने के लिए नहीं है जो "tar -tzf my_tar.tar.gz> / dev / null" करता है?
रॉब वेल्स

क्या यह नहीं माना जाता है tar -t > /dev/null(नोट: tबनाम -t)?
इंट्रास्टेलर एक्सप्लोरर

1
@IntrastellarExplorer जो मेरी ओर से एक टाइपो है, हालांकि यह अभी भी हाइफ़न के बिना काम करना चाहिए। मैं सिर्फ पुराने शैली के लिए इस्तेमाल कर रहा हूँ टार पर विकल्प। unix.stackexchange.com/questions/394060/…
जॉन बोकर

32

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

असफल टार बॉल टेस्ट का उदाहरण ...

$ echo "this will not pass the test" > hello.tgz
$ tar -xvzf hello.tgz -O > /dev/null
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors
$ rm hello.*

काम करने का उदाहरण ...

$ ls hello*
ls: hello*: No such file or directory
$ echo "hello1" > hello1.txt
$ echo "hello2" > hello2.txt
$ tar -cvzf hello.tgz hello[12].txt
hello1.txt
hello2.txt
$ rm hello[12].txt
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz -O
hello1.txt
hello1
hello2.txt
hello2
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz
hello1.txt
hello2.txt
$ ls hello*
hello1.txt  hello2.txt  hello.tgz
$ rm hello*

1
मुझे ऐसा लगता है कि यह सबसे अच्छी परीक्षा है। यह वास्तव में प्रत्येक फ़ाइल को निकालता है और सुनिश्चित करता है कि कोई त्रुटि नहीं है।
आस्तीन

वास्तव में उपयोगी। मैंने एक शेल स्क्रिप्ट बनाई है, फ़ाइल के पथ को पास करने के लिए एक तर्क हुक जोड़ें और इसे मेरे पथ में डाल दें :) [tar -xvzf $ 1 -O> / dev / null]
smonff

@ स्लीव्स आपको क्यों लगता है कि यह स्वीकृत उत्तर से बेहतर है? tar -tvzf hello.tgz> / dev / null भी यही त्रुटि देता है।
15:17 पर डैश 17291

5
@ Dash17291 मैं ऐसा इसलिए कहता हूं क्योंकि मुझे उम्मीद है कि यह साबित करने के लिए एक कठिन समस्या होगी कि सभी मामलों के लिए, -tvf सभी त्रुटियों या भ्रष्टाचारों को पकड़ लेगा जो कि एक -xvf है। दूसरे शब्दों में, -xvf उस सभी -tvf को पकड़ लेगा, लेकिन मैं यह नहीं कह सकता कि रूपांतरण सत्य है।
आस्तीन

शायद आपको > /dev/nullकाम करने के उदाहरण के लिए भी उपयोग करना चाहिए ।
मोई

12

आप pigzपुरालेख चेकअप को गति देने के लिए (। समानांतर gzip) का उपयोग करके * .tag.gz फ़ाइल की सामग्री भी देख सकते हैं :

pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null

मिनी बेंचमार्क: इसे पिगज़ के साथ चलाना -cvd: 80s, जबकि स्वीकृत उत्तर टार -tzv के साथ चल रहा है: 22G संग्रह पर 143s।
वाडीह एम।

इस पद्धति का उपयोग करते समय आप "टार: प्रमुख सदस्यों के नामों में से" को हटाकर क्रोनजोब से अधिसूचना कैसे निकाल सकते हैं?
MaXi32

3

मैंने निम्नलिखित कमांड की कोशिश की है और वे अच्छी तरह से काम करते हैं।

bzip2 -t file.bz2
gunzip -t file.gz

हालाँकि, हम यह देख सकते हैं कि ये दोनों कमांड समय लेने वाली हैं। हो सकता है कि कंप्रेस फ़ाइलों के बरकरार निर्धारण के लिए हमें कुछ और त्वरित तरीके की आवश्यकता हो।


2

उपयोग करने के लिए एक अच्छा विकल्प है tar -tvvf <filePath> जो एक लाइन जोड़ता है जो फ़ाइल की तरह की रिपोर्ट करता है।

एक वैध .tar फ़ाइल में उदाहरण:

> tar -tvvf filename.tar 
drwxr-xr-x  0 diegoreymendez staff       0 Jul 31 12:46 ./testfolder2/
-rw-r--r--  0 diegoreymendez staff      82 Jul 31 12:46 ./testfolder2/._.DS_Store
-rw-r--r--  0 diegoreymendez staff    6148 Jul 31 12:46 ./testfolder2/.DS_Store
drwxr-xr-x  0 diegoreymendez staff       0 Jul 31 12:42 ./testfolder2/testfolder/
-rw-r--r--  0 diegoreymendez staff      82 Jul 31 12:42 ./testfolder2/testfolder/._.DS_Store
-rw-r--r--  0 diegoreymendez staff    6148 Jul 31 12:42 ./testfolder2/testfolder/.DS_Store
-rw-r--r--  0 diegoreymendez staff  325377 Jul  5 09:50 ./testfolder2/testfolder/Scala.pages
Archive Format: POSIX ustar format,  Compression: none

दूषित .tar फ़ाइल:

> tar -tvvf corrupted.tar 
tar: Unrecognized archive format
Archive Format: (null),  Compression: none
tar: Error exit delayed from previous errors.

यह BSD टार पर होता है लेकिन GNU टार पर नहीं।
mcallister

1

ये सभी बहुत ही उप-इष्टतम समाधान हैं। से GZIP कल्पना

ID2 (IDentification 2)
फ़ाइल को gzip प्रारूप में होने के रूप में पहचानने के लिए ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213 ) ये निश्चित मान हैं।

जो भी भाषा आप उपयोग कर रहे हैं उसमें कोडित किया जाना है।


यदि फ़ाइल को काट दिया गया है, तो यह पता लगाने के लिए पूर्ण अपघटन की आवश्यकता होगी
दर्शन

0

> -O विकल्प का उपयोग करें। [...] यदि टार फ़ाइल भ्रष्ट है, तो प्रक्रिया एक त्रुटि के साथ समाप्त हो जाएगी।

कभी-कभी हां, लेकिन कभी-कभी नहीं। आइए एक भ्रष्ट फ़ाइल का एक उदाहरण देखें:

echo Pete > my_name
tar -cf my_data.tar my_name 

# // Simulate a corruption
sed < my_data.tar 's/Pete/Fool/' > my_data_now.tar
# // "my_data_now.tar" is the corrupted file

tar -xvf my_data_now.tar -O

यह दिखाता है:

my_name
Fool  

भले ही तुम अमल करो

echo $?

टार ने कहा कि कोई त्रुटि नहीं थी:

0

लेकिन फ़ाइल दूषित हो गई थी, अब "पीट" के बजाय "मूर्ख" है।


लोग बिना किसी संपीड़न के शायद ही कभी टार फ़ाइलों का उपयोग करते हैं। मुझे लगता है कि आपकी टिप्पणी केवल असंपीड़ित फ़ाइलों का संबंध है।
जेरेकाइक

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