У меня есть папка, в которой, помимо прочего, есть папки, названные по датам, например, 20110908 20110909 и так далее. Каждую ночь я хотел бы запускать инструмент, который проверяет все папки, соответствующие этой маске даты (может быть 201*), и bzip2 любые из них, которые еще не имеют архива bzip2 с похожим именем. И в идеале, если после bzip2-сжатия содержимое папки изменится, я хотел бы повторно bzip2-сжать их.
Есть ли инструмент, который мне поможет?
решение1
Версия командной строки7-Зипможет помочь вам здесь. Вы можете создать пакетный файл, который вы запланируете с помощью Task Scheduler. Вы захотите использовать ключ обновления 7-Zip "u". Скрипт, подобный следующему, может подойти:
for /f %%F IN ('dir /b 201*') (
REM Extract
7z e %F.tar.bz2 %F.tar
REM Update archive
7z u %F.tar -uq2r2y2z2w2 %F
REM Compress
7z a %F.tar.bz2 %F.tar
REM Delete tar
del %F.tar
)
Если вы можете обойтись форматом zip или 7z, то вы можете пропустить шаги «извлечения и повторного сжатия» и просто выполнить шаг обновления.
решение2
Я прибегнул к использованию Python с bzip2.exe
Windows.
#!/usr/bin/env python
import os
import subprocess
rootdir = "C:/XXX/"
for root, subFolders, files in os.walk(rootdir):
for file in files:
filename = os.path.join(root,file)
if(os.path.splitext(filename)[1] != ".bz2"):
print("Compressing "+filename+"...")
process=subprocess.Popen('bzip2.exe %s'%(filename),shell=True)
process.wait()