Comment puis-je tester tous les fichiers zip dans un dossier pour vérifier s'ils sont corrompus ou non?

Il y a longtemps que l'on appelait CFAtest qui faisait cela très bien, mais il a disparu.

Fondamentalement, je cherche un outil similaire (de préférence graphique) qui traversera un chemin donné (de préférence incluant des sous-dossiers) et testera tous les fichiers zip qu'il trouve.

Les options d'enregistrement décent seraient un plus.

Cela trouvera dans tous les sous-dossiers du dossier actuel ( ./ ) les fichiers ( -type f ) avec l'extension zip (ou ZIP ou Zip ou zIp et ainsi de suite, le cas est ignoré, -iname ) et testez leur intégrité ( unzip -t ).

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

Sur Windows, j'utilise 7zip : il fournit une interface utilisateur graphique, est gratuit et prend en charge une large gamme de formats de fichiers d'archives, y compris le zip.

Accédez au dossier que vous souhaitez analyser sur l'Explorateur Windows. Recherchez *.zip , sélectionnez tous les fichiers, cliquez avec le bouton droit de la souris, sélectionnez "Test Archive"

Entrez la description de l'image ici

Ensuite, attendez (notez qu'il faut environ 10 minutes pour explorer.exe passer 100 000.zip avant 7z pour commencer le test):

Entrez la description de l'image ici

La réponse d'Erik ne fonctionnait pas pour moi sur un Mac, mais cela fonctionne pour les fermetures à glissière dans le dossier actuel et tous les sous-dossiers:

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

Indique ceci pour chaque fichier:

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

Commande Quick PowerShell – en utilisant le commutateur "t" de la ligne de commande 7zip

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

Sortie

 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 

Ce n'est peut-être pas tout à fait ce que vous avez demandé, mais il existe un outil nommé Zip2Fix.

Je ne l'ai pas utilisé, mais vous pouvez le télécharger à partir d'ici:

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

Voici un script en Python pour tester des fichiers zip situés dans un ou plusieurs dossiers. Je l'ai testé sur Windows 7 SP1 x64 Ultimate, mais je m'attends à ce qu'il fonctionne sur n'importe quel système d'exploitation.

Exemple de sortie:

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

Scénario:

 ''' 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 

Il écrit également un fichier journal contenant tous les fichiers zip valides ainsi qu'un fichier journal contenant tous les fichiers zip endommagés.

Indicateur de vitesse contre 7zip: 577.64 secondes Python vs 609 secondes 7zip

Entrez la description de l'image ici

Entrez la description de l'image ici