Tengo una carpeta que, además de otras cosas, tiene carpetas con nombres de fechas, por ejemplo, 20110908 20110909, etc. Todas las noches, me gustaría ejecutar una herramienta que verifique todas las carpetas que coincidan con esa máscara de fecha (podría ser 201*) y bzip2 cualquiera de ellas que aún no tenga un archivo bzip2 con un nombre similar. E idealmente, si después de bzip2 el contenido de la carpeta cambia, me gustaría volver a bzip2.
¿Existe alguna herramienta que pueda ayudarme?
Respuesta1
La versión de línea de comando de7 cremalleraspuede ayudarte aquí. Puede crear un archivo por lotes que programe mediante el Programador de tareas. Debería utilizar el interruptor de actualización "u" de 7-Zip. Un script similar al siguiente podría ser la solución:
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
)
Si puede utilizar el formato zip o 7z, puede omitir los pasos de "extraer y luego recomprimir" y simplemente ejecutar el paso de actualización.
Respuesta2
Recurrí al uso de Python con 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()