Ich suche nach einem Windows-Programm, das eine große Gruppe von Dateien komprimieren und in mehreren Zip-Dateien speichern kann, die jeweils (sagen wir) nicht mehr als 100 MB groß sind.
Es ist jedoch wichtig, dass jede einzelne Zip-Datei einzeln geöffnet werden kann, dass Sie die anderen Zip-Dateien nicht benötigen, um eine bestimmte zu öffnen.
Dies soll mich davor bewahren, manuell zu versuchen, Dateien im Wert von 100 MB (oder etwas weniger) auszuwählen, sie zu komprimieren und zu wiederholen.
Auch hier funktioniert die normale Art und Weise, wie Programme wie WinZip damit umgehen, NICHT für mich, da ich glaube, dass es einen Satz wie fileset.zip, fileset.z01, fileset.z02 usw. erstellt, und ich verstehe, dass Sie eine Datei wie nicht öffnen können fileset.z02 allein, ohne alle anderen im Set zu haben. Komprimierung ist NICHT erforderlich, ich versuche nur, sie zu packen, nicht unbedingt zu komprimieren. Komprimierung wäre großartig, aber der wahre Zweck besteht darin, die Dateien in überschaubaren Blöcken zu sammeln.
Erfüllen irgendwelche Zip-Dienstprogramme das, was ich brauche?
Interessantes Problem! Ich kenne keine Software, um das zu erreichen, was Sie wollen, aber wie wäre es mit so etwas?
#!/usr/bin/env python
import os, operator, sys
limit = int(sys.argv[1])
dirpath = os.path.abspath(sys.argv[2])
# make a generator for all file paths within dirpath
all_files = ( (os.path.join(basedir, filename) for basedir, dirs, files in os.walk(dirpath) for filename in files))
all_file_sizes = ((os.path.getsize(fname), fname) for fname in all_files)
sorted_files = sorted(all_file_sizes)
def yield_groups(size_filenames, limit):
cumulative_size = 0
file_list = []
for file_size, file_name in size_filenames:
new_size = cumulative_size + file_size
#print "%r" % new_size, "%r" %limit, new_size > limit, file_name
if new_size > limit:
#print "bigger"
yield file_list
file_list = [file_name]
cumulative_size = file_size
else:
file_list.append(file_name)
cumulative_size += file_size
yield file_list
for i, group in enumerate(yield_groups(sorted_files, limit)):
print ("tar -cvf /tmp/group-%03u.tar %s" % (i, ' '.join(group)))
Bei mir scheint es ganz gut zu funktionieren:
➜ chunks>du -hs *
1,0M file1
1,0M file2
1,0M file3
1,0M file4
1,0M file5
2,0M file6
2,0M file7
3,0M file8
3,0M file9
Jetzt Gruppen von 3 MB anfordern:
➜ chunks>python /tmp/sizezip.py 3145728 /tmp//chunks/
tar -cvf /tmp/group-000.tar /tmp/chunks/file1 /tmp/chunks/file2 /tmp/chunks/file3
tar -cvf /tmp/group-001.tar /tmp/chunks/file4 /tmp/chunks/file5
tar -cvf /tmp/group-002.tar /tmp/chunks/file6
tar -cvf /tmp/group-003.tar /tmp/chunks/file7
tar -cvf /tmp/group-004.tar /tmp/chunks/file8
tar -cvf /tmp/group-005.tar /tmp/chunks/file9
Oder besser gesagt 5MB:
➜ chunks>python /tmp/sizezip.py 5242880 /tmp//chunks/
tar -cvf /tmp/group-000.tar /tmp/chunks/file1 /tmp/chunks/file2 /tmp/chunks/file3 /tmp/chunks/file4 /tmp/chunks/file5
tar -cvf /tmp/group-001.tar /tmp/chunks/file6 /tmp/chunks/file7
tar -cvf /tmp/group-002.tar /tmp/chunks/file8
tar -cvf /tmp/group-003.tar /tmp/chunks/file9
Beachten Sie, dass dies ein Quick-and-Dirty-Code ist. Es wird nicht einmal versucht, das Rucksackproblem zu lösen .
Eine weitere Option, mit oder ohne Komprimierung, ist die folgende:
Implementieren Sie eine Schleife, die den gesamten Kopierbaum durchläuft und dabei Folgendes tut:
Machen Sie mit Ihren neu erstellten Chunk-Archiven, was Sie wollen
Dieses Verfahren hat einige Vorteile:
Das Verfahren (oder jedes von Ihnen gewählte Tool) kann jedoch fehlschlagen, wenn Sie einzelne Dateien haben, die über Ihrer Dateigrößenbeschränkung liegen. Aber wenn sie aus dem Weg geräumt werden, können Sie diese anschließend in einem manuellen Prozess bearbeiten.
PS! Dies ähnelt dem Python-Ansatz, aber Sie benötigen kein Python, und es kann entweder automatisiert oder eigentlich auch manuell ohne allzu großen Aufwand verwendet werden. Ich habe einen ähnlichen Durchlauf mit ein paar tausend Dateien durchgeführt, bei dem wir einige Zwischendateien und so weiter entfernt haben, und die Arbeit mit einer Kopie der Originaldaten hat alles viel einfacher gemacht
PPS! Eine Kopie der Daten erfordert jedoch, dass Sie Platz haben, um Ihre Daten vorübergehend zu duplizieren
Ich habe die gleiche Anforderung und habe recherchiert und spinzip.exe gefunden. Das Problem ist jedoch, dass die Ordnerstruktur in der ZIP-Datei beibehalten wird, was für meine Anforderungen nicht gut ist. Der Autor sagte, sie wüssten nicht, wie sie das Problem beheben könnten. http://www.donationcoder.com/forum/index.php?board=298.0
Deine Frage ist über ein Jahr alt. Wenn Sie also eine Lösung gefunden haben, posten Sie sie bitte hier als Kommentar, damit ich eine E-Mail-Benachrichtigung erhalten kann. Vielen Dank
DankeNanky