Memecah file besar menjadi potongan-potongan kecil

Jawaban:

79

Anda dapat menggunakan split dan cat .

Misalnya sesuatu seperti

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

(di mana nama file input foodan argumen terakhir adalah awalan output). Ini akan membuat file seperti foo.000 foo.001...

Perintah yang sama dengan opsi pendek:

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

Anda juga dapat menentukan "--line-byte" jika Anda ingin membaginya pada batas-batas garis, bukan hanya jumlah byte yang tepat.

Untuk merakit kembali potongan-potongan yang dihasilkan lagi Anda dapat menggunakan misalnya:

$ cat foo.* > foo_2

(dengan asumsi bahwa shell mengurutkan hasil shell globbing - dan jumlah bagian tidak melebihi batas ketergantungan sistem argumen)

Anda dapat membandingkan hasilnya melalui:

$ cmp foo foo_2
$ echo $?

(yang seharusnya menghasilkan 0)

Atau, Anda dapat menggunakan kombinasi find / sort / xargs untuk merakit kembali potongan-potongan:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
maxschlepzig
sumber
2
Coba perintah ini:man split cat md5sum
Kevin M
6
Saat merakit, saya merekomendasikan di cat foo.{000..NNN}mana NNNbagian terakhir yang diharapkan. Dengan begitu Anda mendapatkan pesan kesalahan jika salah satu bagian hilang. Tetapi perhatikan bahwa -duntuk mendapatkan sufiks numerik khusus untuk GNU split; pada platform lain Anda harus membuat hubungannya dengan foo.aaa, foo.aab, dll
Gilles 'SO berhenti menjadi jahat'
1
Dan ingatlah bahwa, untuk split, KB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024 dll.
Zorawar
1
Bukankah ini ... cat > foo_3seharusnya ... cat >>foo_3?
alk
1
Jika Anda memutuskan untuk mengurangi rasa sakit dengan menggunakan utilitas. rardan 7zipsering digunakan dalam membuat perpecahan seperti itu lebih mudah untuk dipasang kembali lintas-platform
infixed
4

Anda juga dapat melakukan ini dengan Manajer Arsip jika Anda lebih suka GUI. Lihat di bawah 'Simpan-> Opsi Lain-> Pisahkan ke dalam volume'.


sumber
5
saya memberi tanda 'command-line', tetapi terima kasih atas jawabannya :)
Stefan