как распаковать заархивированный файл, который включает в себя различные файлы уровня zip в unix/linux?

Эти шаги помогли мне.

Добавить пользователя:

useradd user

Добавить пароль:

passwd user

Добавьте следующую строку в файл /etc/sudoersс помощью командыvisudo:

user ALL=(ALL)       ALL

или, чтобы стать пользователем root без ввода пароля,

ALL ALL=(ALL) NOPASSWD:ALL

Затем,переключиться на этого пользователя

su user

и запросить привилегии суперпользователя:

sudo su - 

Введите пароль для нового пользователя:

[sudo] password for user:
1
21.11.2019, 16:31
2 ответа

Короткий скрипт вроде этого должен выполнять эту работу (обратите внимание, что вам необходимо иметь резервную копию вашего исходного файла, так как скрипт должен удалить его, чтобы обработать все рекурсивно ).

while [ "$(find. -type f -name '*.zip' | wc -l)" -gt 0 ]; 
  do 
    find -type f -name '*.zip' -exec mkdir '{}'_dir \; \ 
                               -exec unzip -d '{}'_dir -- '{}' \; \
                               -exec rm -- '{}' \;
  done

В некоторых системах можно использовать -deleteвместо -exec rm -- '{}' \;.

  • Команда будет проходить через ваш текущий каталог (, ожидая, что это пустой каталог с единственным Test.zip (или любым другим zip-файлом, )доступным в нем ).
  • Для каждого найденного архива будет создана новая директория с именем архива + _dir (, чтобы избежать конфликтов, если некоторые архивы содержат файлы с совпадающими именами ).
  • Архив будет распакован во вновь созданный каталог и удален обработанный zip-файл
  • Как только все файлы будут обработаны, он повторит еще раз и проверит, доступны ли zip-файлы в дереве каталогов
  • Учтите, что если где-то внутри окажется зип-бомба, то скрипт зациклится на бесконечном цикле.
0
27.01.2020, 23:57

Это отличный кандидат на роль рекурсивного сценария.

Сохраните это как скрипт(например.my_unzip.sh)Не будет работать, если вы вставите в командную строку, так как -равно:

#!/usr/bin/env bash

: ${1:?Please supply a file} # ${1} is the zip being fed to the script -- a little user-friendliness never went amiss
DIR="${1%.zip}" # this is where the current zip will be unzipped
mkdir -p "${DIR}" || exit 1 # might fail if it's a file already
unzip -n -d "${DIR}" "${1}" # unzip current zip to target directory
find "${DIR}" -type f -name '*.zip' -print0 | xargs -0 -n1 "${0}" # scan the target directory for more zips and recursively call this script (via ${0})

Сделать его исполняемым

chmod +x my_unzip.sh

И запустите его с вашим zip-файлом в качестве параметра:

my_unzip.sh /some/path/yourfile.zip

Сохраняет исходный файл, встроенные комментарии объясняют, что происходит.

Трусливый, поскольку он никогда не пытается перезаписать то, что уже существует. Это поведение можно изменить, обновив команду unzip, чтобы удалить -n, чтобы получить запрос, или изменить ее на -o, чтобы принудительно перезаписать.

0
27.01.2020, 23:57

Теги

Похожие вопросы