Jika saya memiliki file besar dan perlu membaginya menjadi 100 megabyte, saya akan melakukannya
split -b 100m myImage.iso
Itu biasanya memberi saya sesuatu seperti
xaa
xab
xac
xad
Dan untuk mengembalikan mereka, saya telah menggunakan
cat x* > myImage.iso
Sepertinya harus ada cara yang lebih efisien daripada membaca setiap baris kode dalam sekelompok file dengan cat
dan mengarahkan output ke file baru. Seperti cara hanya membuka dua file, menghapus EOF
penanda dari yang pertama, dan menghubungkannya - tanpa harus melalui semua konten.
Windows / DOS memiliki perintah salin untuk file biner. Bantuan menyebutkan bahwa perintah ini dirancang untuk dapat menggabungkan beberapa file. Ini bekerja dengan sintaks ini: ( /b
untuk mode biner)
copy /b file1 + file2 + file3 outputfile
Apakah ada yang serupa atau cara yang lebih baik untuk bergabung dengan file besar di Linux daripada kucing?
Memperbarui
Tampaknya itu cat
sebenarnya cara yang benar dan cara terbaik untuk bergabung dengan file. Senang mengetahui saya telah menggunakan perintah yang benar selama ini :) Terima kasih semuanya atas tanggapan Anda.
cat x*
, karena urutan file tergantung pada pengaturan lokal Anda. Lebih baik mulai mengetikcat x
, daripada menekan Esc dan kemudian*
- Anda akan melihat urutan file yang diperluas dan dapat mengatur ulang.cat x*
Anda dapat mempertimbangkan ekspansi brace shell,cat xa{a..g}
yang memperluas urutan yang ditentukan untukcat
xaa xab xac xad xaf xaf xagcat x*
? Apakah pengaturan lokal baru juga tidak mempengaruhisplit
sehingga jikasplit
dancat x*
digunakan pada sistem yang sama mereka akan selalu berfungsi?split.c
di GNU Coreutils, akhiran dibangun dari array tetap karakter:static char const *suffix_alphabet = "abcdefghijklmnopqrstuvwxyz";
. Akhiran tidak akan terpengaruh oleh lokal. (Tapi saya tidak berpikir ada orang waras yang akan memesan ulang huruf kecil; bahkan EBCDIC mempertahankan pesanan standar mereka.)Jawaban:
Untuk itulah
cat
dibuat. Karena ini adalah salah satu alat GNU tertua, saya pikir sangat tidak mungkin bahwa alat lain melakukannya lebih cepat / lebih baik. Dan itu bukan pemipaan - itu hanya mengarahkan keluaran.sumber
cat x, then press Esc
trick yang Anda sebutkan adalah rapi .. saya sudah mencari sesuatu seperti itu, terima kasih ... komentar yang baik dan jawaban yang baikCtrl+W
untuk memotong kata dan kemudianCtrl+Y
menempelkannya.Dibawah tenda
Tidak ada cara yang lebih efisien selain menyalin file pertama, kemudian menyalin file kedua setelahnya, dan seterusnya. Baik DOS
copy
dancat
lakukan itu.Setiap file disimpan secara terpisah dari file lain pada disk. Hampir setiap sistem file yang dirancang untuk menyimpan data pada perangkat seperti disk beroperasi dengan blok. Berikut adalah presentasi yang sangat disederhanakan tentang apa yang terjadi: disk dibagi menjadi beberapa blok, katakan 1 kB, dan untuk setiap file sistem operasi menyimpan daftar blok yang membuatnya. Sebagian besar file bukan jumlah blok bilangan bulat, jadi blok terakhir hanya ditempati sebagian. Dalam praktiknya, filesystem memiliki banyak optimisasi, seperti berbagi blok parsial terakhir antara beberapa file atau menyimpan "blok 46798 hingga 47913" daripada "blok 46798, blok 46799, ...". Ketika sistem operasi perlu membuat file baru, ia mencari blok gratis. Blok tidak harus berurutan: jika hanya blok 4, 5, 98 dan 178 yang gratis, Anda masih dapat menyimpan file 4kB.
Anda dapat mendukung blok parsial di file tengah, tetapi itu akan menambah kompleksitas, terutama ketika mengakses file secara tidak berurutan: untuk melompat ke byte ke-10340, Anda tidak bisa lagi melompat ke byte ke-100 dari blok ke-11, Anda harus untuk memeriksa panjang setiap blok intervensi.
Mengingat penggunaan blok, Anda tidak bisa hanya menggabungkan dua file, karena secara umum file pertama berakhir di pertengahan blok. Tentu, Anda dapat memiliki kasus khusus, tetapi hanya jika Anda ingin menghapus kedua file saat digabungkan. Itu akan menjadi penanganan yang sangat spesifik untuk operasi yang langka. Penanganan khusus seperti itu tidak hidup sendiri, karena pada sistem file tipikal, banyak file sedang diakses pada saat yang sama. Jadi, jika Anda ingin menambahkan pengoptimalan, Anda perlu berpikir hati-hati: apa yang terjadi jika beberapa proses lain membaca salah satu file yang terlibat? Apa yang terjadi jika seseorang mencoba menggabungkan A dan B ketika seseorang menggabungkan A dan C? Dan seterusnya. Secara keseluruhan, optimasi langka ini akan menjadi beban besar.
Secara keseluruhan, Anda tidak dapat membuat menggabungkan file lebih efisien tanpa membuat pengorbanan besar di tempat lain. Itu tidak layak.
Pada pemisahan dan bergabung
split
dancat
merupakan cara sederhana untuk memisahkan dan menggabungkan file.split
mengurus pembuatan file bernama dalam urutan abjad, sehinggacat *
berfungsi untuk bergabung.Kelemahan dari
cat
bergabung adalah tidak kuat terhadap mode kegagalan umum. Jika salah satu file terpotong atau hilang,cat
tidak akan mengeluh, Anda hanya akan mendapatkan output yang rusak.Ada utilitas kompresi yang menghasilkan arsip multi bagian, seperti
zipsplit
danrar -v
. Mereka tidak terlalu unixy, karena mereka kompres dan mengemas (merakit beberapa file menjadi satu) selain membelah (dan sebaliknya membongkar dan membuka kompres selain bergabung). Tetapi mereka berguna karena mereka memverifikasi bahwa Anda memiliki semua bagian, dan bahwa bagian-bagian itu selesai.sumber
Tapi bukan itu yang sebenarnya terjadi. Shell menghubungkan stdout
cat
langsung ke file yang terbuka, yang berarti bahwa "pergi melalui stdout" sama dengan menulis ke disk.sumber
cat
. Terima kasih telah memberi tahu saya tentang koneksi langsung.Saya pernah memiliki masalah ini: saya ingin bergabung dengan beberapa file, tetapi tidak memiliki cukup ruang disk untuk menampungnya dua kali lipat.
Jadi saya menulis banyak program:
Ini memungkinkan saya untuk melakukan sesuatu seperti
dan dengan demikian menghapus file sumber sementara 128M masih tidak tertulis. Sedikit berbahaya, tetapi jika datanya tidak begitu berharga, atau mereka ada di tempat lain juga, itu layak.
Jika perlu, saya dapat menyediakan sumbernya.
sumber
Secara teknis, ini adalah cara mengakses seluruh file tanpa harus membaca dan menulis seluruh konten, dan dapat berguna untuk file besar atau jika ada sedikit ruang tersisa:
Dan kemudian gunakan
myImage.iso
, misalnyaMeskipun tentu saja
myImage.iso
adalah file khusus (bernama pipa) dan bukan file biasa, jadi ini mungkin berguna atau tidak tergantung pada apa yang Anda coba lakukan.sumber
File Membelah
Dibagi Berdasarkan Ukuran
Jika Anda ingin membagi file besar menjadi file kecil dan pilih nama dan ukuran file output kecil ini adalah caranya.
Dengan cara ini Anda memilih untuk membagi satu file besar ke bagian yang lebih kecil dari 500 MB. Anda juga ingin nama file bagian adalah SmallFile. Perhatikan bahwa Anda perlu dot setelah nama file. Hasilnya harus menghasilkan file baru seperti ini:
Dibagi Dengan Jumlah Garis
Dengan cara ini Anda akan membagi file tekstual menjadi file yang lebih kecil terbatas hingga 50 baris.
Hasilnya harus seperti ini:
Pisahkan By Bytes
Dibagi menjadi file kecil dengan ukuran khusus file kecil dalam byte:
Hasilnya harus mirip dengan hasil dari Membagi Dengan Jumlah Garis .
File Bergabung
Anda dapat menggabungkan file dengan dua cara. Yang pertama adalah:
atau dengan:
Catatan: Saat Anda bergabung file file file kecil tidak boleh rusak. Juga semua file kecil (bagian) harus dalam direktori yang sama.
sumber