非常に多くの(完全ではないが)同一のファイルを大量に作成する、恥ずかしいほど並列処理を行っています。「オンザフライ」でファイルをアーカイブして、データが必要以上のスペースを消費しないようにする方法はありますか?
プロセス自体はコマンドラインパラメータを受け入れ、作成された各ファイルの名前をstdoutに出力します。私はそれを呼び出して、parallel --gnu
(別のプロセスからの)入力の分散と出力の収集を処理します。
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
パイプの最初の部分の簡単な例bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
どのようにmagic_otf_compressor
見えるでしょうか?各入力行をファイル名として扱い、各ファイルを圧縮.tar
アーカイブ(処理されたすべてのファイルに対して同じアーカイブ!)にコピーして、それを削除することになっています。(実際には、処理された各ファイルの名前を出力するだけで十分です。別| parallel --gnu rm
のファイルがファイルの削除を処理できます。)
そのようなツールはありますか?各ファイルを個別に圧縮することは考慮していません。これは、あまりにも多くのスペースを浪費します。私は調べましたarchivemount
(ファイルシステムをメモリに保持します->不可能、ファイルが大きすぎて多すぎます)およびavfs
(FUSEと連携させることができませんでした)。私は何を逃したのですか?
私はそのようなツールを自分でハッキングすることからほんの一歩ですが、誰かが以前にそれをしたはずです...
編集:本質的に私は標準入力フロントエンドを探していると思いますlibtar
(tar
コマンドラインから引数を読み取るコマンドラインフロントエンドとは対照的です)。