it-swarm.com.de

Wie kann ich alle Zip-Dateien in einem Ordner testen, um zu überprüfen, ob sie beschädigt sind oder nicht?

Es gab vor langer Zeit ein Hilfsprogramm namens CFAtest, das dies recht gut machte, aber es ist verschwunden.

Grundsätzlich suche ich nach einem ähnlichen Tool (vorzugsweise grafisch), das einen bestimmten Pfad (vorzugsweise einschließlich Unterordner) durchläuft und alle gefundenen Zip-Dateien testet.

Ordentliche Protokollierungsoptionen wären von Vorteil.

21
isarris

Finde jede Zip-Datei in jedem Unterordner

Dies findet in allen Unterordnern des aktuellen Ordners (.) die Dateien (-type f) mit der Endung Zip (oder Zip oder Zip oder Zip usw., Groß-/Kleinschreibung wird ignoriert, -iname) und testet ihre Integrität (Option -t) als leise ( Option -q, zusammen -tq). Ganz zu sein bedeutet: Nicht den Inhalt der Zip-Datei auflisten, sondern nur Testergebnisse melden.

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

Nur aktueller Ordner (keine Unterordner)

Wenn Sie nur die Dateien im aktuellen Verzeichnis und nicht in Unterordnern überprüfen möchten, verwenden Sie

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

im Verzeichnis mit den Zip-Dateien. Dadurch wird auch nach Dateierweiterungen wie Zip oder Zip oder Zip gesucht. Die Groß- und Kleinschreibung wird ignoriert.

15
erik

Unter Windows verwende ich 7Zip : Es bietet eine grafische Benutzeroberfläche, ist kostenlos und unterstützt eine Vielzahl von Archivdateiformaten, einschließlich Zip.

Navigieren Sie in Windows Explorer zu dem Ordner, den Sie analysieren möchten. Nach *.Zip suchen, alle Dateien auswählen, mit der rechten Maustaste klicken, "Testarchiv" auswählen

enter image description here

Warten Sie dann (beachten Sie, dass es ungefähr 10 Minuten dauert, bis Explorer.exe 100.000 .Zip durchläuft, bevor 7z mit dem Testen beginnt):

enter image description here

14

die Antwort von erik hat auf einem Mac für mich nicht funktioniert, aber dies funktioniert für Reißverschlüsse im aktuellen Ordner und in allen Unterordnern:

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

Gibt dies für jede Datei aus:

No errors detected in compressed data of ./2013-10-16.Zip.
8
malhal

Schneller PowerShell-Befehl - Verwenden der 7Zip-Befehlszeile "t" -Schalter

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

Ausgabe

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
2
nixda

Es ist vielleicht nicht ganz das, wonach Sie gefragt haben, aber es gibt ein Tool namens Zip2Fix.

Ich habe es nicht benutzt, aber Sie können es hier herunterladen:

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

Im Folgenden finden Sie ein Skript in Python zum Testen von Zip-Dateien, die sich in einem oder mehreren Ordnern befinden. Ich habe es auf Windows 7 SP1 x64 Ultimate getestet, aber ich würde erwarten, dass es auf jedem Betriebssystem funktioniert.

Ausgabebeispiel:

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

Skript:

'''
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 __== "__main__":
    main()
    #cProfile.run('main()') # if you want to do some profiling

Es schreibt auch eine Protokolldatei mit allen gültigen Zip-Dateien sowie eine Protokolldatei mit allen beschädigten Zip-Dateien.

Geschwindigkeits-Benchmark gegen 7Zip: 577,64 Sekunden Python vs. 609 Sekunden 7Zip

enter image description here

enter image description here

0