Ich habe einen Ordner, der unter anderem Ordner enthält, die nach Datumsangaben benannt sind, z. B. 20110908, 20110909 und so weiter. Jede Nacht möchte ich ein Tool ausführen, das nach allen Ordnern sucht, die dieser Datumsmaske entsprechen (könnte 201* sein), und alle Ordner, die noch kein ähnlich benanntes bzip2-Archiv haben, mit bzip2 komprimieren. Und wenn sich nach dem bzip2-Komprimieren der Ordnerinhalt ändert, möchte ich ihn idealerweise erneut mit bzip2 komprimieren.
Gibt es ein Tool, das mir helfen könnte?
Antwort1
Die Kommandozeilenversion von7-Zipkann Ihnen hier helfen. Sie können eine Batchdatei erstellen, die Sie mit dem Taskplaner planen. Sie sollten den Update-Schalter „u“ von 7-Zip verwenden. Ein Skript wie das folgende könnte den Trick machen:
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
)
Wenn Sie mit der Verwendung des Zip- oder 7z-Formats auskommen, können Sie die Schritte „Extrahieren, dann erneut komprimieren“ überspringen und einfach den Aktualisierungsschritt ausführen.
Antwort2
Ich habe auf Python mit einem bzip2.exe
für Windows zurückgegriffen.
#!/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()