split

Dzieli plik na mniejsze części o stałym rozmiarze lub liczbie linii.

split to narzędzie z pakietu GNU coreutils, które tnie jeden plik na wiele mniejszych kawałków — po zadanej liczbie bajtów, linii albo na określoną liczbę części. Przydaje się, gdy masz gigantyczny log, dump bazy albo plik, który nie mieści się na nośniku czy w limicie załącznika, a chcesz go rozbić i później skleić z powrotem. Efektem jest zestaw plików wyjściowych o nazwach typu xaa, xab, xac (domyślny prefiks to x), a oryginał zostaje nietknięty.

Składnia i najważniejsze opcje

Podstawowa forma: split [OPCJE] PLIK [PREFIKS]. Jeśli podasz PREFIKS, kawałki dostaną nazwy zaczynające się od niego zamiast od x.

  • -b, --bytes=ROZMIAR — dziel po zadanej liczbie bajtów; ROZMIAR przyjmuje sufiksy, np. K=1024, M, G (oraz KB, MB w potęgach 1000).
  • -l, --lines=LICZBA — dziel po zadanej liczbie linii na plik (domyślne zachowanie to 1000 linii).
  • -n, --number=CZĘŚCI — podziel na dokładnie N części; l/N nie łamie linii w środku, r/N rozdaje linie round-robin.
  • -d, --numeric-suffixes — użyj sufiksów liczbowych (00, 01…) zamiast liter.
  • -a, --suffix-length=N — ustaw długość sufiksu (domyślnie 2 znaki).
  • --additional-suffix=SUFIKS — dokleja stałą końcówkę do nazw, np. .txt.
  • --filter=POLECENIE — zamiast zapisywać pliki, przepuść każdy kawałek przez potok do polecenia (zmienna $FILE).

Przykłady użycia

  • split -b 100M backup.tar archiwum_ — tnie backup.tar na kawałki po 100 MB o nazwach archiwum_aa, archiwum_ab
  • split -l 1000 dane.csv czesc_ — dzieli plik na paczki po 1000 linii, wygodne przy imporcie porcjami.
  • split -n 5 duzy.log log_part_ — rozbija plik na dokładnie 5 części o zbliżonym rozmiarze.
  • split -d -a 3 --additional-suffix=.txt raport.txt r_ — daje nazwy r_000.txt, r_001.txt itd.
  • split -b 50M --filter='gzip > $FILE.gz' dump.sql part_ — od razu kompresuje każdy kawałek, bez zapisu wersji nieskompresowanej.

Częste błędy i pułapki

Sklejanie: split nie ma trybu „scal”. Kawałki łączysz zwykłym cat archiwum_* > backup.tar — kolejność sortowania alfabetycznego robi tu za spinacz, więc nie ruszaj nazw sufiksów.

Za mało sufiksów: domyślne dwie litery dają maksimum 676 plików (aazz). Przy bardzo drobnym cięciu split się wyłoży komunikatem o wyczerpaniu sufiksów — ratuje -a z większą liczbą znaków.

macOS vs Linux: na macOS domyślny split to wersja BSD, która nie zna -n, --additional-suffix ani --filter. Jeśli potrzebujesz wariantu GNU, zainstaluj coreutils przez Homebrew i wołaj gsplit.

Bajty vs linie: -b potrafi rozciąć linię (a nawet znak wielobajtowy UTF-8) w połowie. Do plików tekstowych, gdzie linie muszą zostać całe, używaj -l albo -n l/N.

Powiązane komendy: cat (sklejanie kawałków), csplit (dzielenie po wzorcu/kontekście), dd, head, tail oraz wc -l do policzenia linii przed podziałem.