这里是我已经把一个Python脚本。到目前为止,它的测试已经很少了。我已经在Python 2.6中完成了基本的测试。但我更喜欢Python的概念,因为如果发生任何错误,它应该异常中止,而bash脚本可能不会。
这首先检查输入文件是否有效并且尚未解压缩。然后它将输入文件复制到“.bak”扩展名的“备份”文件中。然后它解压缩原始文件,覆盖它。
我确定有些事情我忽略了。请随时提供反馈。
#!/usr/bin/python
# Note, written for Python 2.6
import sys
import shutil
import zipfile
# Get a single command-line argument containing filename
commandlineFileName = sys.argv[1]
backupFileName = commandlineFileName + ".bak"
inFileName = backupFileName
outFileName = commandlineFileName
checkFilename = commandlineFileName
# Check input file
# First, check it is valid (not corrupted)
checkZipFile = zipfile.ZipFile(checkFilename)
checkZipFile.testzip()
# Second, check that it's not already uncompressed
isCompressed = False
for fileObject in checkZipFile.infolist():
if fileObject.compress_type != zipfile.ZIP_STORED:
isCompressed = True
if isCompressed == False:
raise Exception("File is already uncompressed")
checkZipFile.close()
# Copy to "backup" file and use that as the input
shutil.copy(commandlineFileName, backupFileName)
inputZipFile = zipfile.ZipFile(inFileName)
outputZipFile = zipfile.ZipFile(outFileName, "w", zipfile.ZIP_STORED)
# Copy each input file's data to output, making sure it's uncompressed
for fileObject in inputZipFile.infolist():
fileData = inputZipFile.read(fileObject)
outFileObject = fileObject
outFileObject.compress_type = zipfile.ZIP_STORED
outputZipFile.writestr(outFileObject, fileData)
outputZipFile.close()
这是在Mercurial repository in BitBucket。
了不起的信息。目前我最感兴趣的是Subversion和Mercurial。我不认为Subversion有干净/污迹类型的功能。 Mercurial没有想法 - 我相对较新。 – 2009-06-10 16:16:28
@克雷格:Mercurial有钩子。 – Borealid 2010-08-12 00:55:02