我有一个脚本,该脚本创建一个名为“ 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 是我要解压缩的文件,它们位于我的文件夹“数据”中。如果有人可以帮助我,我将不胜感激。预先感谢!
答案 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
pushd
和popd
在POSIX中未定义,您可以将它们更改为cd ./data
和cd ..
,以提高可移植性。显然wget
也不是POSIX,而是很常见的(有关该主题的有趣信息,请参见this线程)