Brechen Sie eine große Datei in kleinere Stücke

Antworten:

79

Sie können split und cat verwenden .

Zum Beispiel so etwas wie

$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.

(wobei der Eingabedateiname foound das letzte Argument das Ausgabepräfix ist). Dies erstellt Dateien wie foo.000 foo.001...

Der gleiche Befehl mit kurzen Optionen:

$ split -b 100k -d -a 3 foo foo

Sie können auch "--line-bytes" angeben, wenn Sie möchten, dass die Zeilengrenzen anstelle der exakten Anzahl von Bytes geteilt werden.

Zum erneuten Zusammensetzen der generierten Teile können Sie zB verwenden:

$ cat foo.* > foo_2

(Unter der Annahme, dass die Shell die Ergebnisse des Shell-Globbing sortiert und die Anzahl der Teile die systemabhängige Grenze der Argumente nicht überschreitet.)

Sie können das Ergebnis vergleichen über:

$ cmp foo foo_2
$ echo $?

(die 0 ausgeben sollte)

Alternativ können Sie eine Kombination aus find / sort / xargs verwenden, um die Teile wieder zusammenzusetzen:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
maxschlepzig
quelle
2
Versuchen Sie diesen Befehl:man split cat md5sum
Kevin M
6
Beim Zusammenbau empfehle ich, cat foo.{000..NNN}wo NNNdas letzte erwartete Stück ist. Auf diese Weise erhalten Sie eine Fehlermeldung, wenn eines der Teile fehlt. Beachten Sie jedoch, dass -ddas Abrufen von numerischen Suffixen spezifisch für die GNU-Aufteilung ist. auf anderen Plattformen müssen Sie mit dem auskommen foo.aaa, foo.aabetc.
Gilles
1
Und denken Sie daran, dass für splitKB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024 usw.
Zorawar
1
Sollte das nicht ... cat > foo_3sein ... cat >>foo_3?
alk
1
Wenn Sie sich dazu entschließen, die Schmerzen mit einem Hilfsprogramm zu lindern. rarund 7zipwerden oft verwendet, um solche Splits einfacher plattformübergreifend wieder zusammenzusetzen
am
4

Sie können dies auch mit Archive Manager tun, wenn Sie eine grafische Benutzeroberfläche bevorzugen. Suchen Sie unter "Speichern-> Andere Optionen-> In Volumes aufteilen von".


quelle
5
Ich markierte es "Kommandozeile", aber danke für die Antwort :)
Stefan