Podziel duży plik na mniejsze części

Odpowiedzi:

79

Możesz użyć split i cat .

Na przykład coś takiego

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

(gdzie wejściowa nazwa pliku to fooostatni argument wyjściowy). Spowoduje to utworzenie plików takich jak foo.000 foo.001...

To samo polecenie z krótkimi opcjami:

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

Możesz także określić „--line-bytes”, jeśli chcesz, aby dzielił się na granicach linii zamiast tylko dokładnej liczby bajtów.

Do ponownego złożenia wygenerowanych elementów możesz użyć np .:

$ cat foo.* > foo_2

(zakładając, że powłoka sortuje wyniki globowania powłoki - a liczba części nie przekracza zależnego od systemu limitu argumentów)

Możesz porównać wynik poprzez:

$ cmp foo foo_2
$ echo $?

(co powinno dać wynik 0)

Alternatywnie możesz użyć kombinacji find / sort / xargs, aby ponownie złożyć elementy:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
maxschlepzig
źródło
2
Spróbuj tego polecenia:man split cat md5sum
Kevin M
6
Podczas montażu polecam, cat foo.{000..NNN}gdzie NNNjest ostatni oczekiwany element. W ten sposób pojawia się komunikat o błędzie, jeśli brakuje jednego z elementów. Zauważ jednak, że -duzyskanie sufiksów numerycznych jest specyficzne dla podziału GNU; na innych platformach masz do czynienia z foo.aaa, foo.aabitp
Gilles
1
I pamiętaj, że dla splitKB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024 itd.
Zorawar
1
Nie powinno tak ... cat > foo_3być ... cat >>foo_3?
alk
1
Jeśli zdecydujesz się złagodzić ból za pomocą narzędzia. rari 7zipsą często używane do ułatwienia składania takich podziałów między platformami
naprawiono
4

Możesz to również zrobić za pomocą Archive Managera, jeśli wolisz GUI. Zajrzyj do „Zapisz-> Inne opcje-> Podziel na tomy”.


źródło
5
oznaczyłem to jako „wiersz poleceń”, ale dzięki za odpowiedź :)
Stefan