Wie komprimiere ich Dateien mit einer Größenbeschränkung?

18

Ich habe ein Skript, das Dateien aus einem Ordner komprimiert. Ich möchte sicherstellen, dass die komprimierte Datei nicht größer als 10 MB ist. Wenn die Größe mehr als 10 MB beträgt, sollte eine weitere ZIP-Datei erstellt werden.

Gibt es einen Befehl (oder eine andere Methode), der dafür verwendet werden kann?

Vishnu
quelle
1
Die Frage hat das gzip- Tag, aber der Text bezieht sich auf zip . Können Sie das klären? (Die Antworten sind nach den verschiedenen Formaten unterteilt.)
Håkan Lindqvist
Ich kann kein zip in das Tag einfügen, weshalb ich gzip verwendet habe. Wenn Sie eine gzip-Methode haben, die ich für dieses Problem verwenden kann, kann ich das auch verwenden.
Vishnu

Antworten:

20

Mit der Option " --split-size " können Sie die " split archive " -Funktionalität von " zip " selbst nutzen .

Aus der Manpage "zip" (" man zip"):

(...)

Eine Verwendung von geteilten Archiven ist das Speichern eines großen Archivs auf mehreren Wechselmedien
. Bei einem geteilten Archiv mit 20 geteilten Dateien werden die Dateien in
der Regel
ARCHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip genannt (ersetzen Sie ARCHIVE durch den Namen Ihres Archivs) . Beachten Sie, dass die
letzte Datei die ZIP-Datei ist.

(...)

-s splitsize
--split-size splitsize

Geteilte Größe ist eine Zahl, auf die optional ein Multiplikator folgt.
Derzeit muss die Zahl eine Ganzzahl sein. Der Multiplikator kann
derzeit k (Kilobyte), m (Megabyte), g (Gigabyte)
oder t (Terabyte) sein. Da 64 KB die minimale Aufteilungsgröße ist, werden Zahlen
ohne Multiplikatoren standardmäßig mit Megabyte angegeben. Um beispielsweise
ein geteiltes Archiv namens foo mit dem Inhalt des Leistenverzeichnisses mit
670 MB zu erstellen, das zum Brennen
von CDs nützlich sein könnte, lautet der Befehl:

                zip -s 670m -r foo bar

könnte verwendet werden.

So erstellen eine Split Zip - Archiv , könnten Sie wie folgt vorgehen (die „ -r“ ist die „rekursiven“ -Schalter auf Verzeichnisse des Verzeichnisses enthalten):

$ zip -r -s 10m archive.zip directory/

Um die Datei zu " zip" entpacken , wird in der Manpage erklärt, dass Sie den Schalter "-s 0`" verwenden sollten:

(...)

 zip -s 0 split.zip --out unsplit.zip

konvertiert ein geteiltes Archiv in ein Single-File-Archiv.

(...)

Sie "trennen" also zuerst die ZIP-Datei mit dem Schalter "-s 0":

$ zip -s 0 archive.zip --out unsplit.zip

... und dann entpacken Sie die unsplit-Datei:

$ unzip unsplit.zip

Ricmarques
quelle
6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

Gibt Ihnen eine Reihe von Dateien:

archive.tar.gzaa

archive.tar.gzab

...

Was dann dekomprimiert werden kann mit:

cat archive.tar.* | tar -xzvf -
Henrik Carlqvist
quelle
2

Hier ist, wie ich es für eine 5-GB-Datei gemacht habe (aufgeteilt in 1 GB vs 10 MB als OP gefragt) ...

Beispiel: ein Auftrennen 5GB - Datei in 1GB - Dateien auf einen FAT32 - USB (Dateinamen „FIVE_GB_FILE.ISO“) kopieren

Schritt 1: Komprimieren Sie die Datei (keine Komprimierung, dasselbe Verzeichnis wie die Quelle)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

Schritt 2 : Teilen Sie die 5- GB-Zip-Datei in 1-GB-Zip-Dateien auf

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... Sie sollten die folgenden 1 GB-Dateien haben (UND das Original UND die Zip-Datei aus Schritt 1)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
Jay Marm
quelle