如何使用解压缩命令解压缩文件?

时间:2020-07-13 05:27:53

标签: bash zip unzip

我有一个脚本,该脚本创建一个名为“ data”的文件夹。然后,它使用wget下载文件,这些文件(.zip格式)从当前目录移至文件夹“ data”。之后,我想要解压缩这些文件。我正在使用unzip filename.zip,当我在cmd上使用它时它可以工作,但是我不知道为什么它在脚本中不起作用。

这是脚本:

#!/bin/bash

mkdir data

wget http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip && mv datos_abiertos_covid19.zip data && unzip datos_abiertos_covid19.zip
wget http://187.191.75.115/gobmx/salud/datos_abiertos/diccionario_datos_covid19.zip && mv diccionario_datos_covid19.zip data && unzip diccionario_datos_covid19.zip

datos_abiertos_covid19.zip diccionario_datos_covid19.zip 是我要解压缩的文件,它们位于我的文件夹“数据”中。如果有人可以帮助我,我将不胜感激。预先感谢!

2 个答案:

答案 0 :(得分:2)

它失败是因为unzip foo.zip假定foo.zip在当前目录中,但是您只是将其移到了子目录data中。以交互方式,您可能首先cd data,这就是它起作用的原因。

要使其在您的脚本中起作用,只需将脚本cd data也设置为

#!/bin/bash
mkdir data
cd data || exit 1
wget http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip && unzip datos_abiertos_covid19.zip

通过这种方式,文件直接下载到data目录,因此不需要mv,并且unzip命令按预期工作。

答案 1 :(得分:0)

我的方法:

#!/bin/bash

set -e    # Exit if any command fails

mkdir data
pushd ./data >/dev/null

for i in 'datos_abiertos_covid19.zip' 'diccionario_datos_covid19.zip'; do
        # Don't unzip (or exit) if 'wget' fails, don't exit if 'unzip' fails
        wget "http://187.191.75.115/gobmx/salud/datos_abiertos/$i" -O "./$i" || continue
        unzip "./$i" || true
done

popd >/dev/null
  • 在这种情况下,文件名不需要加引号,但无论如何我都这样做,以强调您可以/应该在必要时这样做
  • 如果您要构建用于下载zip文件的更通用的脚本,则当然可以将变量用于文件列表,URL,下载目录等
  • 我知道它已被标记为bash,但是值得一提:pushdpopd在POSIX中未定义,您可以将它们更改为cd ./datacd ..,以提高可移植性。显然wget也不是POSIX,而是很常见的(有关该主题的有趣信息,请参见this线程)