回答:
これにより、現在のフォルダー(.
)のすべてのサブフォルダーで-type f
拡張子zip
(またはZIP
or Zip
or zIp
など、大文字と小文字は無視されます)のファイル()が検出され、-iname
それらの整合性(オプション-t
)が静かであることをテストします(オプション-q
、一緒-tq
)。つまり、zipファイルの内容をリストするのではなく、テスト結果を報告するだけです。
find . -type f -iname '*.zip' -exec unzip -tq {} \;
サブフォルダではなく現在のディレクトリ内のファイルのみを確認する場合は、次を使用します。
unzip -tq '*.[Zz][Ii][Pp]'
zipファイルがあるディレクトリ内。また、これはファイル拡張子をチェックするZIP
か、Zip
またはzIp
などで、大文字と小文字は無視されます。
find
、持っていない場合は、Cygwinをインストールしてください。
for
コマンドを使用します。
Windowsでは7zipを使用します。グラフィカルユーザーインターフェイスを提供し、無料で、zipなどの幅広いアーカイブファイル形式をサポートしています。
Windowsエクスプローラーで分析する特定のフォルダーに移動します。を検索し*.zip
、すべてのファイルを選択して右クリックし、「アーカイブのテスト」を選択します
次に待機します(explorer.exeが100,000 .zipを通過してから7zがテストを開始するまでに約10分かかることに注意してください):
$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
求めていたものとは異なるかもしれませんが、Zip2Fixという名前のツールがあります。
私はそれを使用していませんが、ここからダウンロードできます:
1つまたは複数のフォルダーにある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と609秒の7zip