我有 575 个 bz2 文件,平均大小为 3G,需要将它们转换为 .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 中使用一个命令或循环完全转换它们。

最佳答案

GNU Parallel 并行简单快速地执行它们:

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 的进度表。

关于bash - 将多个文件从 bz2 转换为 gz 格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45884963/

10-12 05:29