【问题标题】:Creating a gzip file using bash script使用 bash 脚本创建 gzip 文件
【发布时间】:2019-07-11 13:36:18
【问题描述】:

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

gzip -l hard_0.msOut.gz 

上面写着 gzip: hard_0.msOut.gz: not in gzip format

我的 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 文件。

【问题讨论】:

  • 这取决于slim 命令的作用。它会创建 gzip 文件吗?将.gz 附加到文件名不会将其更改为 gzip 文件。
  • 您正在将/home/noor/popGen/build/./slim $entry 的输出重定向到您恰好用.gz 命名的文件。您实际上必须针对该文件运行gzip 以使用 gzip 对其进行压缩,以便对其进行 gzip 压缩。一旦你这样做了,gzip 里面只会有一个文件(你压缩的那个),所以对它运行-l 会非常无聊。

标签: bash gzip


【解决方案1】:

您将值输出到名为 something.gz 的文件中,但这并不意味着它已被 gzip 压缩。这只是意味着您选择了 .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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2021-08-29
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多