मुझे यह सवाल मिला है कि डेटा के बिना वैध टार फाइल होने पर कैसे निर्धारित किया जाए? , लेकिन मैं सोच रहा था: वहाँ एक तैयार कमांड लाइन समाधान है?
मुझे यह सवाल मिला है कि डेटा के बिना वैध टार फाइल होने पर कैसे निर्धारित किया जाए? , लेकिन मैं सोच रहा था: वहाँ एक तैयार कमांड लाइन समाधान है?
जवाबों:
क्या सिर्फ टारबॉल की एक सूची प्राप्त करने और आउटपुट को फेंकने के बजाय, फ़ाइल को डिकम्प्रेस करने के बजाय?
tar -tzf my_tar.tar.gz >/dev/null
टिप्पणी के अनुसार संपादित किया गया। धन्यवाद zrajm!
टिप्पणी के अनुसार संपादित करें। जमे हुए लौ धन्यवाद! यह परीक्षण किसी भी तरह से डेटा की अखंडता का अर्थ नहीं है। क्योंकि यह एक टेप अभिलेखीय उपयोगिता के रूप में डिज़ाइन किया गया था, टार के अधिकांश कार्यान्वयन एक ही फ़ाइल की कई प्रतियों की अनुमति देगा!
-z
विकल्प भी अनावश्यक है। यह निकालने या सूची मोड में कुछ भी नहीं करता है।
-z
यह निश्चित रूप से GNU टार के साथ मामला है - क्या आप जानते हैं कि क्या यह कहीं और है (BSD, आदि)?
tar.gz
? कोई समर्थन जानकारी?
आप शायद फ़ाइलों की अखंडता का परीक्षण करने के लिए gzip -t विकल्प का उपयोग कर सकते हैं
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
Gzip फ़ाइल का परीक्षण करना भ्रष्ट नहीं है:
gunzip -t file.tar.gz
टार फ़ाइल का परीक्षण करना भ्रष्ट नहीं है:
gunzip -c file.tar.gz | tar -t > /dev/null
बैकअप के हिस्से के रूप में आप शायद बाद की कमांड को चला सकते हैं और $ मूल्य की जांच कर सकते हैं? बाद में 0 (सफलता) मान के लिए। यदि या तो टार या गज़िप में एक मुद्दा है, $? एक गैर शून्य मान होगा।
bzip2 -t file.bz2
bz2 फ़ाइलों के लिए।
tar -t > /dev/null
(नोट: t
बनाम -t
)?
यदि आप डिस्क को निकाले बिना एक टार फ़ाइल का वास्तविक परीक्षण अर्क करना चाहते हैं, तो -ओ विकल्प का उपयोग करें। यह फाइलसिस्टम के बजाय मानक आउटपुट के अर्क को प्रायोजित करता है। यदि टार फ़ाइल भ्रष्ट है, तो प्रक्रिया एक त्रुटि के साथ समाप्त हो जाएगी।
असफल टार बॉल टेस्ट का उदाहरण ...
$ 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*
> /dev/null
काम करने के उदाहरण के लिए भी उपयोग करना चाहिए ।
आप pigz
पुरालेख चेकअप को गति देने के लिए (। समानांतर gzip) का उपयोग करके * .tag.gz फ़ाइल की सामग्री भी देख सकते हैं :
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
मैंने निम्नलिखित कमांड की कोशिश की है और वे अच्छी तरह से काम करते हैं।
bzip2 -t file.bz2
gunzip -t file.gz
हालाँकि, हम यह देख सकते हैं कि ये दोनों कमांड समय लेने वाली हैं। हो सकता है कि कंप्रेस फ़ाइलों के बरकरार निर्धारण के लिए हमें कुछ और त्वरित तरीके की आवश्यकता हो।
उपयोग करने के लिए एक अच्छा विकल्प है 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.
ये सभी बहुत ही उप-इष्टतम समाधान हैं। से GZIP कल्पना
ID2 (IDentification 2)
फ़ाइल को gzip प्रारूप में होने के रूप में पहचानने के लिए ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213 ) ये निश्चित मान हैं।
जो भी भाषा आप उपयोग कर रहे हैं उसमें कोडित किया जाना है।
> -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
लेकिन फ़ाइल दूषित हो गई थी, अब "पीट" के बजाय "मूर्ख" है।
-v
यदि आप आउटपुट को केवल पाइप कर रहे हैं तो क्यों उपयोग करें/dev/null
?