当 gzip 仍然是 运行 时程序开始下一行代码

program starting next line of code when gzip is still running

在 shell 脚本中,我首先生成一个文件,然后使用 gzip 将其压缩,然后使用 scp 将其传输到远程机器。在 gzip 成功完成指向下一行代码的指针之前这里的问题因此我在远程机器上部分传输 gz 文件。

我的意思是 gzip 命令正在启动 zip 但在 zip 完成之前(因为文件很大,所以完成 zip 过程需要一些时间),下一行代码正在执行;这是 scp,所以我在远程机器上进行了部分文件传输。

我的问题是我可以指定的 gzip 选项是什么,在 zip 过程成功完成之前指针不应移动到下一行代码。

GZIP 在我的代码中使用如下:

gzip -c <filename> > <zip_filename> 2>&1 | tee -a <log_filename>

求推荐。

首先,如果我这样做

gzip -cr /home/username > homefolder.gz

bash 等到命令结束,然后再执行下一个命令(即使在脚本中使用)。

但是,如果我弄错了或者你的 运行 后台命令,你可以等到 gzip 完成,使用以下代码:

#!/bin/bash

gzip -cr "" > ".gz" &
while true; do
    if fuser -s "" ".gz"; then
        echo "gzip still compressing ''"
    else
        echo "gzip finished compressing '' (archive is '.gz')"
        break
    fi
done

exit 0

或者如果你只想等待什么都不做,那就更简单了:

gzip -cr "" > ".gz"
while fuser -s "" ".gz"; do :; done
# copy your file wherever you want