मैं सत्यापित करने के लिए किसी फ़ोल्डर में सभी ज़िप फ़ाइलों का परीक्षण कैसे कर सकता हूं कि वे दूषित हैं या नहीं?


23

लंबे समय पहले CFAtest नामक एक उपयोगिता थी जो यह काफी अच्छी तरह से कर रही थी, लेकिन यह गायब हो गई है।

मूल रूप से, मैं एक समान टूल (अधिमानतः चित्रमय) की तलाश कर रहा हूं जो किसी दिए गए पथ (अधिमानतः सबफ़ोल्डर्स सहित) को पार कर जाएगा और सभी ज़िप फ़ाइलों का परीक्षण करेगा जो इसे पाता है।

निर्णय लॉगिंग विकल्प एक प्लस होगा।


4
कौन सा ऑपरेटिंग सिस्टम?
मट्टियो

कोई भी हाल ही में पैकर संग्रह अखंडता की जाँच कर सकता है।
Overmind

जवाबों:


17

हर सबफ़ोल्डर में प्रत्येक ज़िप-फ़ाइल ढूंढें

यह वर्तमान फ़ोल्डर के सभी उप-फ़ोल्डर में मिलेगा ( .) फ़ाइलें ( -type fविस्तार के साथ) zip(या ZIPया Zipया zIpऔर इतने पर, मामले को नजरअंदाज कर दिया जाता है, -iname) और उनके अखंडता (विकल्प का परीक्षण -t) किया जा रहा है शांत (विकल्प -q, एक साथ -tq)। पर्याप्त होने के नाते: ज़िप-फ़ाइल की सामग्री को सूचीबद्ध न करें, लेकिन केवल परीक्षा परिणाम की रिपोर्ट करें।

find . -type f -iname '*.zip' -exec unzip -tq {} \;

बस वर्तमान फ़ोल्डर (कोई सबफ़ोल्डर नहीं)

यदि आप वर्तमान निर्देशिका में फ़ाइलों की जांच करना चाहते हैं, और किसी भी सबफ़ोल्डर में नहीं, तो उपयोग करें

unzip -tq '*.[Zz][Ii][Pp]'

ज़िप फ़ाइलों के साथ निर्देशिका में। यह फ़ाइल एक्सटेंशन ZIPया Zipया अन्य के लिए भी जांच करता है zIp, मामले की अनदेखी की जाती है।


1
और अगर आप विंडोज पर हैं और आपके पास findCygwin नहीं है ।
डेनियल आर हिक्स

2
... या forकमांड का उपयोग करें ।
करण


2
यदि कई ज़िप फ़ाइल हैं, या यदि उनमें कई फाइलें हैं, तो कम वर्बोज़ आउटपुट वांछित हो सकते हैं। उसके लिए unzip -q विकल्प का उपयोग करें: unzip -tq
malamut

1
या विंडोज के लिए गिट स्थापित करें (आप पहले से ही अगर आप एक डेवलपर हो सकते हैं) जो एक बैश और कई अन्य सहायक गन्नो क्लच टूल के साथ आता है।
wp78de

15

विंडोज पर मैं 7zip का उपयोग करता हूं : यह एक ग्राफिकल यूजर इंटरफेस प्रदान करता है, मुफ्त है और ज़िप सहित संग्रह फ़ाइल स्वरूपों की एक विस्तृत श्रृंखला का समर्थन करता है।

दिए गए फ़ोल्डर पर नेविगेट करें जिसे आप विंडोज एक्सप्लोरर पर विश्लेषण करना चाहते हैं। खोजें *.zip, सभी फ़ाइलों का चयन करें, राइट-क्लिक करें, "टेस्ट आर्काइव" चुनें

यहाँ छवि विवरण दर्ज करें

फिर प्रतीक्षा करें (ध्यान दें कि एक्सप्लोरर १०,००० के लिए १०,००० मिनट लगते हैं।

यहाँ छवि विवरण दर्ज करें


8

एरिक का जवाब मेरे लिए मैक पर काम नहीं करता था, लेकिन यह वर्तमान फ़ोल्डर और सभी सबफ़ोल्डरों में ज़िप के लिए काम करता है:

find . -name '*.zip' -exec unzip -tq {} \;

प्रत्येक फ़ाइल के लिए यह आउटपुट:

No errors detected in compressed data of ./2013-10-16.zip.

2

क्विक पॉवरशेल कमांड - 7zip के कमांडलाइन "t" स्विच का उपयोग करके

$7z = "T:\folder\to\7z.exe"
Dir "C:\folder\to\check" -r -include @("*.zip","*.7z") | % { & $7z t $_ -r}

उत्पादन

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Processing archive: D:\testfile.zip

Testing     my test file.txt
Testing     second file.doc

Everything is Ok

Folders: 0
Files: 2
Size:       10353
Compressed: 5721

1

यह काफी नहीं हो सकता है कि आपने क्या मांगा है, लेकिन एक उपकरण है जिसका नाम Zip2Fix है।

मैंने इसका उपयोग नहीं किया है लेकिन आप इसे यहाँ से डाउनलोड कर सकते हैं:

http://leelusoft.blogspot.com/2011/06/zip2fix-10.html


0

यहां एक या कई फ़ोल्डरों में स्थित zipfiles का परीक्षण करने के लिए पायथन में एक स्क्रिप्ट के नीचे है। मैंने इसे विंडोज 7 SP1 x64 अल्टीमेट पर परीक्षण किया है, लेकिन मुझे उम्मीद है कि यह किसी भी OS पर काम करेगा।

आउटपुट का उदाहरण:

Total time spent was 577.64 seconds, checking 100 files, totaling 77.06 GB, 
among which 0 were corrupted.

स्क्रिप्ट:

'''
Test if the zip files are not corrected
'''

from __future__ import print_function
from __future__ import division

import sys
import zipfile
import glob
import os
import time

def test_zipfile(filepath):
    '''
    Test whether a zipfile is valid
    Some lines were taken from http://stackoverflow.com/questions/4875747/python-script-to-check-if-a-zip-file-is-corrupt
    '''
    start_time = time.time()
    filesize = os.path.getsize(filepath)
    print('Starting testing file: {0} ({1:.2f} MB)'.format(filepath,filesize/10**6), end='')
    the_zip_file = zipfile.ZipFile(filepath)
    ret = the_zip_file.testzip()
    time_spent = time.time() - start_time
    print('\tTest ended. Time spent: {0:.2f} s'.format(time_spent))
    if ret is not None:
        print("First bad file in zip {0}: {1}".format(filepath,ret))
        is_valid = False
    else:
        #print "Zip file is good."
        is_valid = True

    return is_valid, time_spent, filesize


def main():
    '''
    This is the main function
    '''

    # Parameters
    zipfiles_root_folder = '.'
    log_filepath_corrupted = 'result_corrupted.log'
    log_file_corrupted = open(log_filepath_corrupted, 'w')
    log_filepath_valid = 'result_valid.log'
    log_file_valid = open(log_filepath_valid, 'w')
    zipfile_filepaths = sorted(glob.iglob(os.path.join(zipfiles_root_folder, '*', '*.zip'))) # Modify this to whatever folders you need

    # Testing zipfiles
    start_time = time.time()
    total_filesize = 0
    number_of_corrupted_zipfile = 0
    for zipfile_filepath in zipfile_filepaths: # generator, search immediate subdirectories 
        is_valid, test_zipfile_time_spent, filesize = test_zipfile(zipfile_filepath)
        total_filesize += filesize
        if is_valid:
            log_file_valid.write('{0}\n'.format(zipfile_filepath))
        else:
            log_file_corrupted.write('{0}\n'.format(zipfile_filepath))
            number_of_corrupted_zipfile += 1

    # Cleaning  
    log_file_corrupted.close()
    log_file_valid.close()

    time_spent = time.time() - start_time
    print('Total time spent was {0:.2f} seconds, checking {1} files, totaling {2:.2f} GB, among which {3} were corrupted.'.format(time_spent, len(zipfile_filepaths),total_filesize/10**9,number_of_corrupted_zipfile))


if __name__ == "__main__":
    main()
    #cProfile.run('main()') # if you want to do some profiling

यह एक लॉग फ़ाइल भी लिखता है जिसमें सभी वैध ज़िप फाइलें होती हैं और साथ ही सभी भ्रष्ट ज़िप फ़ाइलों वाली लॉग फ़ाइल होती है।

7zip के खिलाफ स्पीड बेंचमार्क: 577.64 सेकंड अजगर बनाम 609 सेकंड 7zip

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.