Я - своего рода новичок в 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
Я взял код, который Вы дали мне, и добавьте незначительную модификацию, Еще раз спасибо!!
Возможный сценарий - сохраняет это в названном файле, например, 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
сделайте сценарии более стабильными в случае, например, пробелы в именах файлов. Я не буду вдаваться больше в подробности здесь, но оставлять ключевые слова: твердые кавычки, мягкие кавычки, окружают переменные&&
и ||
названы ОПЕРАТОРАМИ