сравнение файлов локальной директории и удалённой по ssh

Рейтинг: 1Ответов: 0Опубликовано: 05.07.2023

Скрипт проверяет доступность хостов из списка адресов в файле 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"

Ответы

Ответов пока нет.