Perintah split Linux: bagi berkas dan verifikasi hasil gabungan
Perintah split membagi satu berkas menjadi beberapa potongan menurut jumlah baris atau ukuran byte. Berkas masukan tetap ada; untuk memulihkan data, gabungkan semua potongan yang benar dalam urutan semula dan periksa hasilnya. Gunakan direktori keluaran baru agar nama potongan tidak bertabrakan dengan berkas yang sudah ada.
Secara bawaan, GNU split membuat potongan berisi paling banyak 1.000 baris dan memakai awalan x dengan nama awal seperti xaa dan xab. Berkas terakhir dapat lebih pendek. Pilih -l untuk jumlah baris atau -b untuk ukuran byte sesuai tujuan pembagian.
Sintaks dan persiapan
split [OPSI] [BERKAS_MASUKAN [AWALAN_KELUARAN]]
OPSI, BERKAS_MASUKAN, dan AWALAN_KELUARAN adalah penanda yang perlu diganti. Tanpa berkas masukan, atau jika namanya berupa tanda -, split membaca masukan standar. Periksa split --version, split --help, dan man split pada sistem yang dipakai. Contoh opsi panjang di sini mengikuti GNU coreutils.
Awalan yang berbeda membantu mengenali satu kumpulan potongan, tetapi tidak dengan sendirinya menjamin nama belum digunakan. Split dapat menimpa keluaran yang bernama sama. Simpan setiap pekerjaan dalam direktori baru dan periksa status perintah sebelum memakai hasilnya.
Bagi teks menjadi 500 baris per berkas
Jalankan seluruh blok berikut di Bash atau shell yang mendukung sintaksnya. Blok membuat direktori latihan baru, menyiapkan teks 1.001 baris dan berkas byte kecil, lalu menjalankan perintah pembagian. Tanda kurung membatasi perubahan direktori pada subshell, sehingga direktori kerja semula tidak berubah.
(
set -eu
labdir=$(mktemp -d)
cd "$labdir"
seq 1 1001 > data.txt
printf '0123456789abcdefXYZ' > archive.bin
split -l 500 data.txt part-
printf 'Lab files: %s\n' "$labdir"
)
Perintah split yang berhasil biasanya tidak mencetak nama potongan. Pada contoh ini, periksa tiga berkas: part-aa berisi angka 1 sampai 500, part-ab berisi 501 sampai 1000, dan part-ac berisi 1001. Berkas data.txt tetap berisi seluruh 1.001 baris.
Setelah blok selesai, pindah ke lokasi yang dicetak sesudah Lab files: dengan cd "/jalur/latihan-yang-dicetak", lalu ganti penanda jalurnya. Perintah wc -l data.txt part-aa part-ab part-ac memperlihatkan 1001, 500, 500, dan 1 baris. Baris total milik wc menjumlahkan semua berkas yang diminta, termasuk sumber, sehingga totalnya 2002, bukan jumlah data unik.
Untuk memeriksa pemulihan teks, jalankan cat part-aa part-ab part-ac > data-restored.txt, kemudian cmp data.txt data-restored.txt. Cmp yang berhasil tidak menampilkan perbedaan dan berstatus 0. Periksa status dengan printf '%s\n' "$?" segera setelah cmp; tampilan kosong saja bukan pemeriksaan status yang lengkap.
Bagi menurut byte dan gabungkan kembali
Berkas archive.bin yang dibuat tadi berisi 19 byte ASCII tanpa baris baru di akhir. Untuk melihat batas potongan dengan jelas tanpa membuat berkas besar, gunakan ukuran 8 byte.
split -b 8 archive.bin archive-part-
Hasilnya adalah archive-part-aa berisi 01234567, archive-part-ab berisi 89abcdef, dan archive-part-ac berisi XYZ. Periksa ukurannya dengan wc -c archive.bin archive-part-aa archive-part-ab archive-part-ac: ukurannya 19, 8, 8, dan 3 byte. Jumlah pada baris total mencakup sumber dan potongannya.
Untuk pekerjaan besar, contoh split -b 100M archive.bin large-part- menetapkan 100 MiB atau 104.857.600 byte per potongan, kecuali potongan terakhir yang dapat lebih kecil. Dalam GNU split, M memakai pangkat 1024, sedangkan MB memakai pangkat 1000. Pada bahan latihan 19 byte ini, perintah 100M hanya membuat satu potongan; ukuran kecil sengaja dipakai untuk latihan.
Gabungkan tiga potongan hasil pembagian 8 byte tadi dengan menyebutkan nama secara eksplisit dan berurutan:
cat archive-part-aa archive-part-ab archive-part-ac > archive-restored.bin
Selanjutnya jalankan cmp archive.bin archive-restored.bin untuk perbandingan byte demi byte. Anda juga dapat menjalankan sha256sum archive.bin archive-restored.bin; kedua berkas yang sama menghasilkan hash yang sama. Setelah pemindahan, bandingkan pula dengan hash sumber yang dicatat sebelum pemindahan, bukan hanya dengan daftar hash yang tidak diketahui asalnya.
Jangan memasukkan berkas hasil pemulihan ke kumpulan masukan. Pola wildcard yang terlalu luas dapat menyertakan sisa potongan dari pekerjaan sebelumnya atau berkas lain dengan awalan serupa. Tujuan yang sudah berisi data penting juga dapat ditimpa oleh >. Jumlah, urutan, ukuran, dan hasil verifikasi harus sesuai sebelum menganggap pemulihan selesai.
Contoh masukan standar yang berdiri sendiri
Blok berikut membuat direktori latihan baru lagi agar nama part-aa dan part-ab tidak bercampur dengan potongan contoh 500 baris. Tanda - menyuruh split membaca data dari pipa.
(
set -eu
labdir=$(mktemp -d)
cd "$labdir"
printf 'a\nb\nc\nd\n' | split -l 2 - part-
cat part-aa
cat part-ab
printf 'Lab files: %s\n' "$labdir"
)
Berkas part-aa berisi dua baris pertama, sedangkan part-ab berisi dua baris berikutnya. Keluaran kedua cat sebelum lokasi latihan dicetak adalah:
a
b
c
d
Jika baris terakhir masukan tidak mempunyai karakter baris baru, potongan terakhir tetap mempertahankan byte aslinya. Jangan menambahkan baris baru atau mengubah pengodean potongan ketika tujuannya memulihkan berkas secara identik.
Opsi dan penamaan potongan
| Opsi | Kegunaan |
|---|---|
-l N |
Memasukkan paling banyak N baris ke setiap potongan pada mode baris biasa. |
-b UKURAN |
Membatasi ukuran potongan dalam byte; batas dapat berada di tengah baris. |
-C UKURAN |
Mengisi potongan dengan baris lengkap selama muat; satu baris yang lebih panjang daripada batas tetap dipecah. |
-d |
Menggunakan akhiran angka, dimulai dari nol. |
-a N |
Menentukan panjang akhiran nama; pilih kapasitas yang cukup untuk seluruh potongan. |
--additional-suffix=NILAI |
Menambahkan teks pada akhir nama potongan. |
Di direktori latihan pertama, split -b 8 -d -a 4 --additional-suffix=.bin archive.bin numeric- membuat numeric-0000.bin, numeric-0001.bin, dan numeric-0002.bin. Gunakan direktori atau awalan baru untuk percobaan lain. Jika panjang akhiran dipatok dengan -a dan nama habis, GNU split melaporkan kesalahan; sebagian potongan yang sudah dibuat dapat tetap ada.
Batas baris, byte, dan ruang penyimpanan
Opsi -b menghitung byte, sehingga dapat memotong baris teks atau bahkan memisahkan byte sebuah karakter multibyte. Potongan semacam itu belum tentu dapat dibaca sendiri sebagai teks, walaupun gabungan byte dalam urutan benar dapat memulihkan masukan. Pilih -l bila batas baris lebih penting daripada ukuran byte yang seragam.
GNU -C bukan jaminan bahwa setiap baris selalu utuh: bila satu baris melebihi batas ukuran, baris itu tetap dipotong. Periksa kondisi ini sebelum memilih ukuran untuk data dengan rekaman panjang. Pembagian berdasarkan baris fisik juga tidak memahami rekaman CSV bertanda kutip yang memuat baris baru.
Perilaku -C dan kapasitas nama dijelaskan dalam sumber manual GNU coreutils 9.11, bagian split invocation. Ringkasan opsi tersedia pada manual GNU split yang ditayangkan di man7.
Siapkan ruang untuk sumber, potongan, dan hasil pemulihan jika ketiganya disimpan bersamaan. Kegagalan karena ruang habis dapat meninggalkan keluaran sebagian. Pertahankan sumber dan periksa status operasi serta hasil verifikasi; jangan menghapus sumber hanya karena nama potongan sudah muncul.
FAQ
Apakah split menghapus berkas asli?
Tidak. Split membaca masukan dan menulis potongan baru. Berkas sumber tetap ada, tetapi keluaran yang bertabrakan namanya dapat ditimpa. Gunakan direktori terpisah dan pastikan jalur sebelum menjalankan perintah.
Apakah semua potongan bisa digabung hanya dengan cat?
Untuk pembagian berurutan dengan -l atau -b seperti latihan ini, gabungkan seluruh potongan yang benar dalam urutan aslinya. Metode lain seperti mode round-robin mempunyai susunan berbeda. Periksa mode pembagian dan hash hasil; jangan menganggap satu pola wildcard cocok untuk semua pekerjaan.




