私は、さまざまな製品の複数のインストーラにバンドルされる数千のバイナリを含むフォルダを生成するスクリプトを作成しています。スクリプトの大部分は、さまざまな任意の場所から一時的なパスにファイルを "コピー"して、インストーラ/ tarballの望ましい出力構造を生成します。大規模なハードリンクループのアクセラレーション/パラレル化
この操作の最も遅い単一の部分は次のように本質的に見える巨大なループです:これが行われている理由は、それが目的の場所にに「コピー」のファイルへのより高速な方法であるということである
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}"
done
最終出力tarballを生成し、ファイルの実際のコピーと同じだけのディスク領域を使用しません。
しかし、このループは非常に遅いです(30,000ファイルをハードリンクするのに約15分かかります)。これがトップエンドのSSDを備えた非常に強力なマシン上で実行されていると仮定すると、これはparallel
タイプのツールでラップするか、ln
のすべての操作をバックグラウンドでバックグラウンドすることで大幅に高速化できるタスクでしょうか?PID
ln
操作の場合は、最後にすべてのプロセスが正常に終了したかどうかを確認します。あるいは、これをスピードアップするための他の手段がありますか?
Worked great。また、驚くほど速く** GNU並列を使用するよりも高速**でした。 – DevNull
@DevNullその仲間を聞いてうれしい! –