使用bash脚本创建gzip文件

时间:2019-07-11 13:36:18

标签: bash gzip

我有一个bash脚本,可以生成一堆文件。但是我希望我的文件是gzip。我编写脚本的方式会产生带有* .gz扩展名的文件。但是,当我使用命令

检查它是否为gzip时
gzip -l hard_0.msOut.gz 

它说 gzip:hard_0.msOut.gz:不是gzip格式

我的bash脚本是:


#!/bin/bash

#generating training data

i_hard=0
i_soft=0
i_neutral=0

for entry in /home/noor/popGen/sweeps/slim_script/singlePop/*
do
    if [[ $entry == *"hard"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry > /home/noor/popGen/sweeps/msOut/singlePop/hard_$i_hard.msOut.gz
        i_hard=$((i_hard+1))
    fi

    if [[ $entry == *"soft"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry > /home/noor/popGen/sweeps/msOut/singlePop/soft_$i_soft.msOut.gz
        i_soft=$((i_soft+1))
    fi
    if [[ $entry == *"neutral"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry > /home/noor/popGen/sweeps/msOut/singlePop/neutral_$i_neutral.msOut.gz
        i_neutral=$((i_neutral+1))
    fi

done

有人可以告诉我如何使用我制作的bash脚本生成gzip文件。

1 个答案:

答案 0 :(得分:1)

您正在将值输出到名为something.gz的文件中,但这并不意味着它已压缩。这只是意味着您选择的文件扩展名为.gz。

要gzip输出,请添加以下示例:

echo "compress me" | gzip -c > file.gz

以上将获取echo的输出并将其通过管道传输到gzip(-c将发送到stdout)并将stdout重定向到名为file.gz的文件

您的完整代码:

#!/bin/bash

#generating training data

i_hard=0
i_soft=0
i_neutral=0

for entry in /home/noor/popGen/sweeps/slim_script/singlePop/*
do
    if [[ $entry == *"hard"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry | gzip -c > /home/noor/popGen/sweeps/msOut/singlePop/hard_$i_hard.msOut.gz
        i_hard=$((i_hard+1))
    fi

    if [[ $entry == *"soft"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry | gzip -c > /home/noor/popGen/sweeps/msOut/singlePop/soft_$i_soft.msOut.gz
        i_soft=$((i_soft+1))
    fi
    if [[ $entry == *"neutral"* ]]; then
        echo "It's there!"
        /home/noor/popGen/build/./slim $entry | gzip -c > /home/noor/popGen/sweeps/msOut/singlePop/neutral_$i_neutral.msOut.gz
        i_neutral=$((i_neutral+1))
    fi

done