Mengalokasikan ruang untuk file output terlebih dahulu dapat meningkatkan kecepatan keseluruhan karena sistem tidak perlu memperbarui alokasi untuk setiap penulisan.
Misalnya, jika di Linux:
size=$({ find . -maxdepth 1 -type f -name 'input_file*' -printf '%s+'; echo 0;} | bc)
fallocate -l "$size" out &&
find . -maxdepth 1 -type f -name 'input_file*' -print0 |
sort -z | xargs -r0 cat 1<> out
Manfaat lain adalah bahwa jika tidak ada cukup ruang kosong, salinan tidak akan dicoba.
Jika aktif btrfs, Anda dapat copy --reflink=alwaysmenggunakan file pertama (yang tidak mengandung salinan data dan karena itu akan hampir instan), dan menambahkan sisanya. Jika ada 10.000 file, itu mungkin tidak akan membuat banyak perbedaan meskipun kecuali file pertama sangat besar.
Ada API untuk menggeneralisasi itu untuk menyalin ulang semua file (the BTRFS_IOC_CLONE_RANGE ioctl), tapi saya tidak dapat menemukan utilitas yang mengekspos API itu, jadi Anda harus melakukannya dalam C (atau pythonatau bahasa lain asalkan mereka dapat memanggil ioctls sewenang-wenang ) .
Jika file sumber jarang atau memiliki urutan besar karakter NUL, Anda bisa membuat file output jarang (menghemat waktu dan ruang disk) dengan (pada sistem GNU):
find . -maxdepth 1 -type f -name 'input_file*' -print0 |
sort -z | xargs -r0 cat | cp --sparse=always /dev/stdin out
findtidak mengurutkan file sama dengan shell glob.