Saya memiliki proses paralel yang memalukan yang menciptakan sejumlah besar file yang identik (tetapi tidak sepenuhnya). Apakah ada cara untuk mengarsipkan file "on the fly", sehingga data tidak mengkonsumsi lebih banyak ruang daripada yang diperlukan?
Proses itu sendiri menerima parameter baris perintah dan mencetak nama setiap file yang dibuat untuk stdout. Saya memintanya untuk parallel --gnu
mengurus distribusi input (yang berasal dari proses lain) dan mengumpulkan output:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
CONTOH SEDERHANA untuk bagian pertama pipa di bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
Bagaimana bisa magic_otf_compressor
terlihat seperti? Seharusnya memperlakukan setiap baris input sebagai nama file, menyalin setiap file ke .tar
arsip terkompresi (arsip yang sama untuk semua file yang diproses!) Dan kemudian menghapusnya. (Sebenarnya, itu sudah cukup untuk mencetak nama setiap file yang diproses, yang lain | parallel --gnu rm
bisa menghapus file-file tersebut.)
Apakah ada alat seperti itu? Saya tidak mempertimbangkan mengompresi setiap file secara terpisah, ini akan menghabiskan terlalu banyak ruang. Saya telah melihat ke dalam archivemount
(akan membuat sistem file dalam memori -> tidak mungkin, file saya terlalu besar dan terlalu banyak) dan avfs
(tidak bisa membuatnya bekerja bersama dengan FUSE). Apa yang saya lewatkan?
Saya sendiri hanya selangkah lagi dari meretas alat semacam itu, tetapi seseorang pasti pernah melakukannya sebelumnya ...
EDIT : Pada dasarnya saya pikir saya sedang mencari front-end stdin untuk libtar
(sebagai lawan dari front-end command-line tar
yang membaca argumen dari, well, baris perintah).