как распаковать файл с помощью команды unzip? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть сценарий, который создает папку с именем «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 - это файлы, которые я хочу распаковать, как только они окажутся в моей папке «data». Я был бы очень признателен, если бы кто-нибудь мог мне помочь. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Ошибка, потому что 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 работает должным образом.

0 голосов
/ 13 июля 2020

Мой подход:

#!/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
  • Имена файлов в этом случае не нужно указывать, но я все равно сделал это, чтобы подчеркнуть, что вы можете / должны сделать это при необходимости
  • Конечно, вы можете использовать переменные для списка файлов, URL, каталога загрузки и т. Д. c. если вы хотите создать более общий сценарий для загрузки zip-файлов
  • Я знаю, что он помечен bash, но стоит упомянуть: pushd и popd не определены в POSIX, вы можете изменить их на cd ./data и cd .. для большей мобильности. Очевидно, что wget тоже не POSIX, но очень распространен (см. эту ветку для получения интересной информации об этом topi c)
...