Как я разархивировал несколько файлов с несколькими паролями в 7zipfull на человечности

Я - своего рода новичок в Linux, и мне приходится нелегко. На Ubuntu 19.10 я сделал маленький сценарий для 7zip для разархивации нескольких файлов с паролем:

FILES=/mnt/sdx
for f in *.7z;
do 7za x -oUNZIPPED $f -ppassowrd;
done

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

То, что я хотел бы знать, - то, если Вы не можете интегрировать эти старые пароли в сценарий, как то, если он пробует одним паролем, и файл не разархивировал, он пробует другим паролем, пока файл успешно не разархивировал или пока доступные пароли не закончены.

Другая вещь, некоторые более старые файлы находятся в .rar. Как я могу развернуть поиск сценария этих двух файлов?


Обновление: Это наконец Работало!!! Спасибо парни для справки и терпения Заключительный Сценарий Похоже на Это:

#!/bin/bash

for file in *.{7z,zip,rar}
do
  for password in Pass1 Pass2 Pass3
  do
    7z x -oOUTPUTDIR -p"${password}" "${file}" && break
  done
done

Я взял код, который Вы дали мне, и добавьте незначительную модификацию, Еще раз спасибо!!

0
задан 6 November 2019 в 14:46

1 ответ

Возможный сценарий - сохраняет это в названном файле, например, 7za_script.sh

#!/bin/bash

for file in *.7z
do
  for password in pass1 pass2 pass3
  do
    7za x -oOUTPUTDIR -p"${password}" "${file}" && break
  done
done

Что это делает?

1. Внешний цикл for file in *.7z

Мы определяем названную переменную file к любой записи в Вашем текущем рабочем каталоге, который заканчивается в .7z. * настоящим подстановочный знак, который расширен до нуля или любого количества символов. *.7z будет таким образом соответствовать чему-либо, что имеет a 7zip суффикс. Цикл теперь работает однажды на соответствие, и мы можем обратиться к соответствию токовой петли, выполненной через $file, т.е. вызов переменной.

2. Внутренний цикл for password in pass1 pass2 pass3

В этом цикле мы определяем tha переменную password explicitely утверждение трех дополнительных значений pass1, pass2, и pass3. Цикл будет работать однажды за каждым значением.

3. 7za- команда

Попытайтесь извлечь текущий файл из нашего списка с данным паролем. Для каждого $file все три $password возможности пробуют. Порядок вложенных циклов таков, что внутренний цикл будет всегда выполняться полностью прежде, чем идти в следующий шаг во внешнем цикле.

4. && break часть

break остановит выполнение цикла самого внутреннего цикла. Таким образом, если мы звоним break в цикле пароля после попытки pass1 pass2 и pass3 опцию даже не попробуют. Вопрос состоит в том, чтобы если не попробовать другие пароли. Простой: после успешного извлечения файла с pass1 другие пароли нельзя попробовать за тот файл.

Каждая команда имеет exit status это также 0 для успеха или любого другого числа для fail (фактическое значение числа может дать больше информации о том, что пошло не так, как надо, но это зависит от отдельной программы). man 7za шоу под DIAGNOSTICS:

0 Нормальных (никакие ошибки или обнаруженные предупреждения)

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

2 Фатальных ошибки

Таким образом, если файл успешно извлечен, код выхода должен быть 0 и если пароль не разблокировал его, это должно быть 2. Можно получить статус выхода предыдущей команды echo $?. Просто попробуйте echo $? после выполнения true или false (команды, которые или всегда успешно выполняются или всегда перестали работать).

Теперь && command означает "команду выполнения, если предыдущая команда была успешна (статус выхода = 0). Таким образом, то, что мы делаем: если $password разблокированный $file (и никакая другая ошибка не произошла), мы break цикл пароля, как нет никакой причины попытки других паролей на том файле. Вместо этого мы можем теперь перейти к следующему файлу.

5. Запущение скрипта

После того как Вы сохранили сценарий как, например. 7za_script.sh и записал пароли там, поскольку Вам нужны они, можно выполнить его через bash 7za_script.sh ИЛИ сделайте это исполняемым файлом с chmod +x 7za_script.sh и выполненный это через ./7za_script.sh.

6.Примечания

  • Сценарий очень упрощен, но просто предназначенный как основной запуск для Вашей карьеры сценариев.
  • Переместите его в свой желаемый каталог и выполните его.
  • Это не будет отличаться между названным файлом 1.7za или каталог 2.7za (который является, очевидно, не заархивированной вещью вообще, но просто совместно использует имя). Тестирование этого было бы следующим шагом.
  • Очень небезопасно сохранить пароли в файле открытого текста, но это, кажется, низкая проблема безопасности во-первых.
  • Заключение в кавычки " и вызов переменных как ${var} вместо $var сделайте сценарии более стабильными в случае, например, пробелы в именах файлов. Я не буду вдаваться больше в подробности здесь, но оставлять ключевые слова: твердые кавычки, мягкие кавычки, окружают переменные
  • && и || названы ОПЕРАТОРАМИ
  • Возьмите это в качестве запуска, попытайтесь понять то, что он делает и любит писать сценарий.
0
ответ дан 22 December 2019 в 00:05

Другие вопросы по тегам:

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