2017-08-25 48 views
2

我有575個bz2文件,平均大小爲3G,需要將它們轉換爲.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 

單個文件也許我可以做bzcat a.bz2 | gzip -c >a.gz,但我想知道如何將它們完全用在bash/linux下一個命令或循環轉換。

+0

這可能有助於https://stackoverflow.com/questions/14505047/loop-through-all-the-files-with-a-specific-extension – marcusshep

回答

1

做這些簡單和快速的並行與GNU並行

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 

如果你喜歡它的外觀,去掉--dry-run。也許增加一個進度表--bar--progress

+1

這非常有幫助!謝謝! –

+0

無需感謝我,Stack Overflow的@OleTange是背後的嚮導** GNU Parallel ** - 確保每個人都能從英特爾爲其支付的所有CPU核心中獲得良好的價值!如果您有任何進一步的問題 - 答案是免費的:-),祝您的項目順利回到SO –

1

在終端,改變目錄到包含.BZ文件之一,則使用下面的命令:

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

這將處理每個文件,一次一個,並給.GZ文件的.bz文件的名稱。例如:DRR091550_1.fastq.bz2將變成DRR091550_1.fastq.gz

+0

謝謝!後來我發現'對於* .bz中的f;做bzcat「$ f」| gzip -c>「$ {f%。*}。gz」&; done'將一起執行:) –

+0

@David Z,是的,它會執行目錄中的所有目標文件,但是它會一次處理它們一次直到完成。如果你有一個多核心處理器,並且它們並行運行,Mark Setchell使用GNU Parallel的答案會更好。 – user3439894

相關問題