Eu tenho uma pasta que, além de outras coisas, possui pastas com nomes de datas, por exemplo, 20110908 20110909 e assim por diante. Todas as noites, eu gostaria de executar uma ferramenta que verifica todas as pastas que correspondem a essa máscara de data (pode ser 201 *) e bzip2 qualquer uma delas que ainda não tenha um arquivo bzip2 com nome semelhante. E, idealmente, se depois de bzip2 o conteúdo da pasta mudar, eu gostaria de bzip2-los novamente.
Existe alguma ferramenta que possa me ajudar?
Responder1
A versão da linha de comando do7-Zippode ajudá-lo aqui. Você pode criar um arquivo em lote que pode ser agendado usando o Agendador de tarefas. Você gostaria de usar a opção de atualização "u" do 7-Zip. Um script como o seguinte pode resolver o problema:
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
)
Se você conseguir usar o formato zip ou 7z, poderá pular as etapas de "extrair e recompactar" e simplesmente executar a etapa de atualização.
Responder2
Recorri ao uso de python com um bzip2.exe
para 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()