2017-08-25 38 views
2

平均サイズが3Gの575 bz2ファイルがあり、それらを下流のパイプラインと互換性を持たせるために.gz形式に変換する必要があります。私はおそらくbzcat a.bz2 | gzip -c >a.gzを行うことができ、単一のファイルについては複数のファイルをbz2からgz形式に変換する

$ ll -h | head 
total 1.4T 
drwxrws---+ 1 dz33 dcistat 24K Aug 23 09:21 ./ 
drwxrws---+ 1 dz33 dcistat 446 Aug 22 11:57 ../ 
-rw-rw---- 1 dz33 dcistat 2.0G Aug 22 11:38 DRR091550_1.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 2.0G Aug 22 11:38 DRR091550_2.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 2.0G Aug 22 11:38 DRR091551_1.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 2.0G Aug 22 11:38 DRR091551_2.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 1.9G Aug 22 11:38 DRR091552_1.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 1.9G Aug 22 11:38 DRR091552_2.fastq.bz2 
-rw-rw---- 1 dz33 dcistat 1.8G Aug 22 11:38 DRR091553_1.fastq.bz2 

$ ll | wc -l 
575 

が、私は完全にbashの/ linuxの内の1つのコマンドまたはループでそれらを変換する方法を疑問に思って。その後、ターミナルで

+0

これは役立つかもしれないhttps://stackoverflow.com/questions/14505047/loop-through-all-the-files-with-a-specific-extension – marcusshep

答えて

1

GNUパラレルと並列に簡単かつ高速にそれらをください:あなたはそれがどのように見えるかのような場合、--dry-runを削除

parallel --dry-run 'bzcat {} | gzip -c > {.}.gz' ::: *bz2 

をサンプル出力

bzcat a.bz2 | gzip -c > a.gz 
bzcat b.bz2 | gzip -c > b.gz 
bzcat c.bz2 | gzip -c > c.gz 

。おそらく、進歩率計を--barまたは--progressで追加してください。

+1

これは非常に役に立ちます!ありがとう! –

+0

Stack Overflowの@OleTangeは、** GNU Parallel **の背後にあるウィザードです。誰もがインテルに優勝したすべてのCPUコアから良い価値を得ることを保証します!あなたのプロジェクトに幸運をもたらし、さらに質問があれば自由に戻ってください - 答えは無料です:-) –

1

、.BZファイルを含む1にディレクトリを変更、次のコマンドを使用します。これは、一度に各ファイル、1を処理し、.gzをファイルを与える

for f in *.bz; do bzcat "$f" | gzip -c >"${f%.*}.gz"; done 

を.bzファイルの名前。

例:DRR091550_1.fastq.bz2DRR091550_1.fastq.gzになります。

+0

ありがとう!私は後でf in * .bzを見つけました。 bzcat "$ f"を実行する| gzip -c> "$ {f%。*}。gz"&; done'はすべて一緒に実行します:) –

+0

@David Z、はい、dirですべての対象ファイルを処理しますが、完了するまで一度に1つずつ処理します。 GNU Parallelを使ったMark Setchellの答えは、マルチコアプロセッサを並行して使用する方がよい場合は、より優れています。 – user3439894

関連する問題