Как я могу проверить все почтовые файлы в папке, чтобы убедиться, что они повреждены или нет?


23

Давным-давно была утилита CFAtest, которая делала это довольно хорошо, но она исчезла.

По сути, я ищу похожий инструмент (предпочтительно графический), который будет проходить по заданному пути (предпочтительно с вложенными папками) и проверять все найденные файлы zip.

Достойные варианты регистрации будет плюсом.


4
Какая операционная система?
Маттео

Любой недавний упаковщик может сделать проверки целостности архива.
Сверхразум

Ответы:


17

Найти каждый zip-файл в каждой подпапке

Найдет во всех вложенных папках текущей папки ( .) файлы ( -type f) с расширением zip(или ZIPили Zipили zIpи так далее, дело игнорировали, -iname) и проверить их целостность (опция -t) быть спокойным (вариант -qвместе -tq). Быть вполне значит: не перечислять содержимое zip-файла, а только сообщать о результатах теста.

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

Просто текущая папка (без подпапок)

Если вы просто хотите проверить файлы в текущем каталоге, а не в каких-либо подпапках, используйте

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

в каталоге с файлами zip. Это также проверяет расширения файлов ZIPили Zipили zIpи так далее, регистр игнорируется.


1
А если у вас Windows и у вас ее нет find, установите Cygwin.
Даниэль Р Хикс

2
... или используйте forкоманду.
Каран


2
Если имеется много файлов ZIP или если они содержат много файлов, может потребоваться меньше подробного вывода. Для этого используйте опцию unzip -q: unzip -tq
malamut

1
Или установите git для Windows (он может быть уже у вас, если вы разработчик), который поставляется с bash и многими другими полезными инструментами gnu cli.
wp78de

15

В Windows я использую 7zip : он предоставляет графический интерфейс пользователя, является бесплатным и поддерживает широкий спектр форматов архивных файлов, включая zip.

Перейдите к папке, которую вы хотите проанализировать в проводнике Windows. Найти *.zip, выбрать все файлы, щелкнуть правой кнопкой мыши, выбрать «Тестовый архив»

введите описание изображения здесь

Затем подождите (обратите внимание, что для explorer.exe требуется около 10 минут, чтобы пройти 100,000 .zip, прежде чем 7z начнет тестирование):

введите описание изображения здесь


8

Ответ Эрика не работал для меня на Mac, но это работает для почтовых индексов в текущей папке и всех подпапках:

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

Выводит это для каждого файла:

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

2

Быстрая команда PowerShell - с помощью командной строки 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


0

Ниже приведен скрипт на Python для тестирования zip-файлов, расположенных в одной или нескольких папках. Я протестировал его на Windows 7 SP1 x64 Ultimate, но я ожидал, что он будет работать на любой ОС.

Пример вывода:

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

Он также записывает файл журнала, содержащий все действительные файлы ZIP, а также файл журнала, содержащий все поврежденные файлы ZIP.

Тест скорости против 7zip: 577,64 секунды Python против 609 секунд 7zip

введите описание изображения здесь

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.