web-dev-qa-db-ja.com

圧縮されていない.lzoファイルを並行して解凍し、元の.lzoファイルを削除します

したがって、.lzoフォルダに/test01/primaryファイルがあり、解凍してからすべての.lzoファイルを削除する必要があります。 /test02/secondaryフォルダでも同じことをする必要があります。両方のフォルダに約150.lzoファイルがあるので、合計で約300ファイルになります。

このように実行していたコマンドラインから、1つのファイルを圧縮解除しましたlzop -d file_name.lzo
すべての.lzoファイルを解凍してから、両方のフォルダーからすべての.lzoファイルを削除する最速の方法は何ですか。私は以下のコードを思いついた。

#!/bin/bash

set -e

export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary

lzop -d $PRIMARY/* & lzop -d $SECONDARY/*
find $PRIMARY $SECONDARY -name '*.lzo' -delete

.lzoファイルを並行して解凍してから、両方のフォルダー内のすべての.lzoファイルを同時に削除して、プロセスを高速化できる可能性があります。もっと良い方法はありますか?

2
user1950349

マニュアルページによると:

   -U, --unlink, --delete
              Delete input files after succesful compression or decompression.

だからあなたは単に走ることができます

lzop -dU -- {"$PRIMARY","$SECONDARY"}/*.lzo

解凍に成功したらすぐに各lzoファイルを削除します。
lzopはシングルスレッドであるため、並列処理が必要な場合はgnu parallelを使用できます。

parallel lzop -dU -- ::: {"$PRIMARY","$SECONDARY"}/*.lzo
1
don_crissti

GNU Parallelは、与えられた順序でジョブを生成しますGNU Parallel。したがって、最初に$ PRIMARYファイルをリストしてから$ SECONDARYファイルをリストすると、$ PRIMARYファイルが最初に処理されます。

そうでない場合--shufが与えられます。 --shuf引数を実行する前に、引数をシャッフルします。毎回$ PRIMARYファイルを1つ、次に$ SECONDARYファイルを取得することはできませんが、少なくとも順序はランダムになります。

1
Ole Tange