如何使用 unzip 命令解压缩文件?
how to unzip a file using unzip command?
我有一个脚本可以创建一个名为“data”的文件夹。然后它使用 wget
下载一个文件,这些文件(.zip 格式)从当前目录移动到文件夹“数据”。之后我想要解压缩这些文件。我正在使用 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 是我在文件夹中后要解压缩的文件“数据”。如果有人能帮助我,我将不胜感激。提前致谢!
它失败了,因为 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
,并且解压缩命令按预期工作。
我的做法:
#!/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
- 在这种情况下不需要引用文件名,但我还是这样做了,以强调你can/should必要时这样做
- 如果您想构建一个更通用的 zip 文件下载脚本,您当然可以为文件列表、URL、下载目录等使用变量
- 我知道它被标记为 bash,但值得一提的是:
pushd
和 popd
未在 POSIX 中定义,您可以将它们更改为 cd ./data
和 cd ..
以获得更多的可移植性。显然 wget
也不是 POSIX,但很常见(有关该主题的有趣信息,请参阅 this 主题)
我有一个脚本可以创建一个名为“data”的文件夹。然后它使用 wget
下载一个文件,这些文件(.zip 格式)从当前目录移动到文件夹“数据”。之后我想要解压缩这些文件。我正在使用 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 是我在文件夹中后要解压缩的文件“数据”。如果有人能帮助我,我将不胜感激。提前致谢!
它失败了,因为 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
,并且解压缩命令按预期工作。
我的做法:
#!/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
- 在这种情况下不需要引用文件名,但我还是这样做了,以强调你can/should必要时这样做
- 如果您想构建一个更通用的 zip 文件下载脚本,您当然可以为文件列表、URL、下载目录等使用变量
- 我知道它被标记为 bash,但值得一提的是:
pushd
和popd
未在 POSIX 中定义,您可以将它们更改为cd ./data
和cd ..
以获得更多的可移植性。显然wget
也不是 POSIX,但很常见(有关该主题的有趣信息,请参阅 this 主题)