Как назначить имя файла переменной после разархивирования неизвестного zip-файла в оболочке bash? - PullRequest
0 голосов
/ 30 марта 2020

Здесь у меня есть zip-файл, но я понятия не имею, как оно называется. Я хочу присвоить имя файла переменной после разархивирования zip-файла в оболочке bash, но я получил сообщение типа

Архив: name.zip накачивается: ... надувается: ..

Вот мой сценарий, и кто-нибудь знает, что с ним не так?

filename=$(unzip -o *.zip)
echo $filename

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Если я вас правильно понял: у вас есть один ZIP-файл, но вы не знаете его имени. Этот ZIP-файл содержит один каталог верхнего уровня, имя которого вы хотите поместить в переменную $filename.

Попробуйте:

    filename=$(unzip -Z -1 *.zip | head -n1 | sed 's/\/$//')
    echo $filename

Но если вы уверены, что имя верхнего каталог внутри вашего ZIP-архива совпадает с именем самого архива без суффикса .zip, который является поведением по умолчанию zip, вы можете просто попробовать:

    filename=$(basename -s .zip *.zip)
    echo $filename
0 голосов
/ 30 марта 2020

Вам просто нужно l oop поверх файлов .zip:

for f in *.zip; do echo "unzipping $f"; unzip -o "$f"; done;

(unzip не вернет имя zip-архива. В результате вы получите имя в $ f.)

...