Я передаю файлы между двумя серверами через SFTP с помощью модуля подпроцесса python. Единственный способ подключения к удаленному серверу - через SFTP-соединение.
Мне нужно убедиться, что две папки на локальном и удаленном серверах идентичны после передачи. Это довольно легко на локальном сервере, базовая команда поиска дает мне то, что мне нужно. Однако я понятия не имею, как получить аналогичный результат на удаленном сервере.
Вот пример структуры файла, идентичной на обеих машинах.
JobDirectory
Job1
test.txt
tonks.txt
Job2
wildlife.txt
Job3
jackinthebox.txt
happygilmore.txt
sadprogrammer.txt
Поэтому мне нужна команда, которая получит имена файлов из Job1
, Job2
и Job3
и вернет их мне.
Что-то вроде
echo "ls *.txt" | sftp -q [email protected]:/path
не очень хорошо отслеживает здесь, так как ему нужен определенный путь. Я мог бы получить список папок в каталоге и запустить команду sftp
каждой из них, но это много удаленных подключений.
Единственными инструментами удаленного доступа, которые я могу использовать, являются подпроцесс и модуль Python OS. Что-то вроде Paramiko SFTP недоступно.
Простое, но неэффективное решение смотрите в ответе @pasabaporaqui, чтобы Рекурсивно перечислить все файлы в sftp.
С вашим неясным ограничением единственное решение, которое использует одно соединение, будет:
sftp
подпроцесс в Pythonls
к нему, одна для каждого каталогаls
для каждого найденного подкаталога. Если вы уже используете find
локально, как насчет следующего?
echo "! find" | sftp -q [email protected]
Со страницы руководства sftp
под Интерактивными командами:
! команда
Выполнить команду в локальной оболочке.