Bash 如何使用解压命令解压文件?
我有一个脚本,它创建了一个名为“data”的文件夹。然后,它使用Bash 如何使用解压命令解压文件?,bash,zip,unzip,Bash,Zip,Unzip,我有一个脚本,它创建了一个名为“data”的文件夹。然后,它使用wget下载一个文件,并将这些文件(.zip格式)从当前目录移动到文件夹“data”中。之后,我想要的是解压缩这些文件。我使用的是解压filename.zip,当我在cmd上使用它时,它会工作,但是我不知道为什么它在脚本中不工作 以下是脚本: #!/bin/bash mkdir data wget http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_co
wget
下载一个文件,并将这些文件(.zip格式)从当前目录移动到文件夹“data”中。之后,我想要的是解压缩这些文件。我使用的是解压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是我在文件夹“data”中之后要解压缩的文件。如果有人能帮助我,我将不胜感激。提前谢谢 它失败,因为
解压foo.zip
假定foo.zip
在当前目录中,但您刚刚将其移动到子目录data
。以交互方式,您可能首先使用cd数据
,这就是它工作的原因
要使其在脚本中工作,只需将脚本cd数据也放在其中:
#!/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 foo.zip
假定foo.zip
在当前目录中,但您只是将其移动到子目录data
。以交互方式,您可能首先使用cd数据
,这就是它工作的原因
要使其在脚本中工作,只需将脚本cd数据也放在其中:
#!/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
这样,文件将直接下载到数据
目录,因此不需要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
- 在这种情况下不需要引用文件名,但我还是这样做了,以强调您可以/应该在必要时这样做
- 当然,如果您想要为下载zip文件构建更通用的脚本,那么您可以使用文件列表、URL、下载目录等变量
- 我知道它标记为bash,但值得一提的是:
pushd
和popd
在POSIX中没有定义,您可以将它们更改为cd./data
和cd..
,以提高可移植性。显然,wget
也不是POSIX,但非常常见(有关该主题的有趣信息,请参阅线程)
我的方法:
#!/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,但值得一提的是:
pushd
和popd
在POSIX中没有定义,您可以将它们更改为cd./data
和cd..
,以提高可移植性。显然,wget
也不是POSIX,但非常常见(有关该主题的有趣信息,请参阅线程)
mv datos\u abiertos\u covid19.zip data
-您正在移动/重命名文件Yep,如果没有名为data的目录,mv
将您的zip文件重命名为data,解决方法是在目录中添加一个尾随斜杠,在这种情况下,data/
因此mv将错误地发出一条消息,指出没有名为data/
的目录,这与将文件重命名为数据相反。@Jetchisel:可能有一个同名目录(请参阅前面的mkdir
命令)。mv datos\u abiertos\u covid19.zip data
-您正在移动/重命名文件,如果没有名为data的目录,mv
会将您的zip文件重命名为data,解决方法是在目录中添加一个尾随斜杠,在这种情况下,data/
,因此mv会错误地显示一条消息,即没有名为data的目录,与仅将文件重命名为数据相反。@Jetchisel:可能有一个同名目录(请参阅前面的mkdir
命令)。mkdir-p data
会更好吗?@jared\u mamrot:更好,因为如果目录已经存在,您不会收到错误消息。另一种方法是执行[[-d data]]| | mkdir data
。mkdir-p data
会更好吗?@jared_mamrot:更好,因为如果目录已经存在,您不会收到错误消息。另一种方法是执行[[-d data]]| | mkdir data
。