Я пытаюсь проверить наличие некоторых файлов в папке нестандартной глубины внутри ZIP-файлов на нескольких серверах, расположенных в списке, чтобы в итоге запустить его в скрипте bash.
Я былВ состоянии выполнить команду на определенном сервере (IP) и получить вывод, проблема началась при попытке использовать текстовый файл списка серверов.
for HOST in $(cat serversList.txt)
do
"sshpass -p '*******' ssh osboxes@$HOST -o StrictHostKeyChecking=no find /home/osboxes/Desktop/script -mindepth 1 -maxdepth 7 -iname '*.zip'" -exec "unzip -l {} \; | grep '\.zip\|filename*' >$(hostname)_out.t**strong text**xt 2>$(hostname)_error.txt"
done
Я считаю, что я не использую один /правильные двойные кавычки (не был уверен, почему попытка запуска напрямую по IP работала с ", а не с").
Я просто не настолько знаком с bash, чтобы знать, как объединять выражения, чтобы они соотносились скоманда (например, использование круглых скобок, которые, как я понял, неприменимы в цикле for).
В основном я ожидаю, что вывод и ошибка будут отправлены в файлы вместе с именем хоста машины, на которой он работал. В настоящее время яполучаю ошибку -
bash: sshpass -p '*******' ssh osboxes@10.0.0.25 -o StrictHostKeyChecking=no find /home/osboxes/Desktop/script -mindepth 1 -maxdepth 7 -iname '*.zip': No such file or directory.
Мне кажется, что не удается извлечь ZIP для поиска внутри, я просто не знаю, как его исправить.
Совет hБудем благодарны:)
Обновление: после ответа @chepner, в конце концов я дошел до этого, запустив в оболочке:
while IFS= read -r host; do sshpass -p '*******' ssh osboxes@"$host" -o StrictHostKeyChecking=no \ "find /home/osboxes/Desktop/script -mindepth 1 -maxdepth 7 -iname \"*.zip\" -exec unzip -l {} \; | grep \"\.zip\|filename*\" >"$(hostname)_out.txt" 2>"$(hostname)_error.txt"; done <serversList.txt
Я пытался избежать того, что мне показалось релевантным, дваждыкавычки (") кода и удаление одного" после find -exec , чтобы устранить отсутствующий аргумент для exec error.
Однако после нажатия введите для вышеупомянутого, Я получаю новую строку (>) на следующей строке, и я не могу понять, почему ..
Это содержимое serversList.txt : 10.0. 0.25 10.0.0.26
Я полагаю, что синтаксис в сочетании с фактом превышения ssh приводит к тому, что это происходит, но мои навыки работы с оболочкой еще не достаточно сильны, чтобы увидеть, чего я здесь упускаю.
Обновление 2-
В конце концов я сделал это с:
while IFS= read -r host; do sshpass -p 'tds654321' ssh osboxes@"$host" -o StrictHostKeyChecking=no \ "find /home/osboxes/Desktop/SecPageProj/testfiles -mindepth 1 -maxdepth 7 -iname *.zip -exec unzip -l {} \;|grep '\.zip\|SecurityPage\|ERTSOC'" >$(hostname)_out.txt 2>$(hostname)_error.txt ;done <serversList.txt
Спасибо за руководство и вдохновение:)