сравнение файлов локальной директории и удалённой по ssh
Скрипт проверяет доступность хостов из списка адресов в файле test_hosts, формирует список доступных, и по ним прогоняет сравнение папок на текущем и на удалённых хостах по ssh.
Необходимо сравнивать содержимое файлов. Использовал diff по образцу
diff local_file.txt <(ssh user@remote_host 'cat remote_file.txt')
Добавил вывод в файл list, вот после выполнения скрипта
Скрипт запускается с указанием директории.
Вот вывод при выполнении сравнения директорий
Предполагаю, что косяк в <(ssh -n user@"${con_ok}" "${directory}${file}") в склейке "${directory}${file}". Пробовал разные варианты с раздельным указанием в своих кавычках, без переменой directory, ничего не помогло. Есть вариант, что проблема в переносах строк, поскольку скрипт писал в notepad++, но поиск по \r\n не дал результатов. Проставлял ; , но тоже не помогло. Нашёл, что директории в выводе в list /dev/fd/* связана с подстановкой в процессы, однако что с этим делать, так и не понял. Прошу помощи.
#!/bin/bash
directory=$1
#проверяем доступность узлов, создаём списки доступных и список недоступных узлов
touch connection_ok
touch connection_err
while read -r hosts
do
echo "${hosts}"
ping "${hosts}" -c 1 2>/dev/null && echo "${hosts}" >> connection_ok || echo "${hosts}" >> connection_err
echo $?
done < test_hosts
#echo "">>connection_ok
echo "UNREACHABLE HOSTS:"
cat connection_err
echo ""
#по списку доступных узлов в connection_ok проводим сравнение папок
touch res_compare
echo "---COMPARE DIRECTORIES---"
while read -r con_ok
do
echo "${con_ok}"
for file in `find ${directory} -type f -name "*"`
do
echo -E -- ${file}
diff ${file} <(ssh -n user@"${con_ok}" "${directory}${file}") && echo "${con_ok} ${file} passed" >> res_compare || echo "${con_ok} ${file} failed" >> res_compare
done > list
done < connection_ok
rm connection_ok
echo "---RESULT---"
cat res_compare
echo "END"