폴더의 모든 zip 파일을 테스트하여 파일이 손상되었는지 확인하려면 어떻게해야합니까?


22

오래 전에 CFAtest라는 유틸리티가 있었는데 꽤 훌륭했지만 사라졌습니다.

기본적으로, 나는 주어진 경로 (바람직하게는 하위 폴더 포함)를 가로 지르고 찾은 모든 zip 파일을 테스트 할 유사한 도구 (바람직하게 그래픽)를 찾고 있습니다.

적절한 로깅 옵션은 플러스입니다.


4
어떤 운영 체제입니까?
Matteo

모든 최근 패커는 아카이브 무결성 검사를 수행 할 수 있습니다.
Overmind

답변:


16

모든 하위 폴더에서 모든 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 파일이있는 디렉토리에 파일 확장자에 대한이 또한 검사는 ZIPZip이나 zIp등, 경우는 무시됩니다.


1
Windows를 사용하고 있고 Windows가없는 경우 findCygwin을 설치하십시오.
Daniel R은

2
... 또는 for명령을 사용하십시오 .
Karan


2
ZIP 파일이 많거나 파일이 많은 경우 덜 자세한 출력이 필요할 수 있습니다. 그 사용 압축 해제의 -q 옵션 : 압축 해제 -Tq
malamut

1
또는 bash 및 기타 유용한 gnu cli 도구와 함께 제공되는 Windows 용 git (개발자 인 경우 이미 가지고있을 수 있음)을 설치하십시오.
wp78de

14

Windows에서는 7zip을 사용 합니다. 그래픽 사용자 인터페이스를 제공하며 무료이며 zip을 포함한 광범위한 아카이브 파일 형식을 지원합니다.

Windows 탐색기에서 분석하려는 지정된 폴더로 이동하십시오. 을 검색하고 *.zip모든 파일을 선택한 후 마우스 오른쪽 버튼을 클릭하고 "Test Archive"를 선택하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 기다리십시오 (7z 테스트를 시작하기 전에 explorer.exe가 100,000 .zip을 통과하는 데 약 10 분이 소요됨).

여기에 이미지 설명을 입력하십시오


8

erik의 답변은 Mac에서 저에게 효과가 없었지만 현재 폴더와 모든 하위 폴더의 zip에 대해서는 작동합니다.

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

다음은 하나 이상의 폴더에있는 zip 파일을 테스트하기위한 Python 스크립트입니다. Windows 7 SP1 x64 Ultimate에서 테스트했지만 모든 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

또한 모든 유효한 zip 파일이 포함 된 로그 파일과 손상된 zip 파일이 모두 포함 된 로그 파일을 작성합니다.

7zip에 대한 속도 벤치 마크 : 577.64 초 Python vs. 609 초 7zip

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.