Itulah cat
dibuat untuk. Karena ini adalah salah satu alat GNU tertua, saya pikir sangat tidak mungkin alat lain melakukan itu lebih cepat/lebih baik. Dan itu bukan perpipaan - itu hanya mengarahkan keluaran.
Di balik terpal
Tidak ada cara yang lebih efisien selain menyalin file pertama, lalu menyalin file kedua setelahnya, dan seterusnya. Keduanya DOS copy
dan cat
lakukan itu.
Setiap file disimpan secara terpisah dari file lain di disk. Hampir setiap sistem file yang dirancang untuk menyimpan data pada perangkat mirip disk beroperasi dengan blok. Berikut adalah presentasi yang sangat disederhanakan tentang apa yang terjadi:disk dibagi menjadi blok, katakanlah 1kB, dan untuk setiap file, sistem operasi menyimpan daftar blok yang membentuknya. Sebagian besar file tidak memiliki jumlah blok bilangan bulat, jadi blok terakhir hanya terisi sebagian. Dalam praktiknya, sistem file memiliki banyak pengoptimalan, 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 kosong, Anda masih dapat menyimpan file 4kB. Menggunakan blok daripada turun ke tingkat byte membantu menemukan blok gratis untuk file baru atau yang sedang tumbuh jauh lebih cepat, dan mengurangi masalah karena fragmentasi saat Anda membuat atau menumbuhkan dan menghapus atau mengecilkan banyak file (meninggalkan peningkatan jumlah lubang).
Anda dapat mendukung blok parsial di tengah file, tetapi itu akan menambah kerumitan yang cukup besar, terutama saat mengakses file secara tidak berurutan:untuk melompat ke byte ke-10340, Anda tidak dapat lagi melompat ke byte ke-100 dari blok ke-11, Anda harus melakukannya untuk memeriksa panjang setiap blok intervensi.
Mengingat penggunaan blok, Anda tidak bisa begitu saja menggabungkan dua file, karena pada umumnya file pertama berakhir di tengah 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 berjalan dengan sendirinya, karena pada sistem file yang khas, banyak file yang diakses pada waktu yang bersamaan. Jadi jika Anda ingin menambahkan pengoptimalan, Anda perlu memikirkan dengan 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 saat seseorang sedang menggabungkan A dan C? Dan seterusnya. Secara keseluruhan, pengoptimalan yang jarang ini akan menjadi beban yang sangat besar.
Secara keseluruhan, Anda tidak dapat membuat penggabungan file menjadi lebih efisien tanpa melakukan pengorbanan besar di tempat lain. Itu tidak layak.
Pada pemisahan dan penggabungan
split
dan cat
adalah cara sederhana untuk memisahkan dan menggabungkan file. split
menangani pembuatan file yang diberi nama dalam urutan abjad, sehingga cat *
berfungsi untuk bergabung.
Kelemahan dari cat
untuk bergabung adalah bahwa itu tidak kuat terhadap mode kegagalan umum. Jika salah satu file terpotong atau hilang, cat
tidak akan mengeluh, Anda hanya akan mendapatkan keluaran yang rusak.
Ada utilitas kompresi yang menghasilkan arsip multi-bagian, seperti zipsplit
dan rar -v
. Mereka tidak terlalu unxy, karena mereka memampatkan dan mengemas (merakit banyak file menjadi satu) selain membelah (dan sebaliknya membongkar dan membuka kompresi selain bergabung). Namun mereka berguna karena memverifikasi bahwa Anda memiliki semua bagian, dan bahwa bagian tersebut lengkap.
Sepertinya harus ada cara yang lebih efisien daripada menyalurkan semua konten melalui
stdin
sistem /stdout
Kecuali bukan itu yang sebenarnya terjadi. Shell menghubungkan stdout dari cat
secara langsung ke file terbuka, yang berarti "melalui stdout" sama dengan menulis ke disk.