Получение списка файлов рекурсивно с использованием SFTP в оболочке или Python без дополнительных библиотек

1

Я передаю файлы между двумя серверами через 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 недоступно.

  • 0
    @MartinPrikryl, этот ответ не соответствует моим требованиям. Первый откроет SFTP-соединение для каждого каталога и написан на bash, второй использует инструмент, к которому у меня тоже нет доступа
  • 0
    Кто удалил другие комментарии / посты здесь? Они были полезны, и я изучал их предложения
Показать ещё 1 комментарий
Теги:
remote-server
remote-access
sftp

2 ответа

0

Простое, но неэффективное решение смотрите в ответе @pasabaporaqui, чтобы Рекурсивно перечислить все файлы в sftp.


С вашим неясным ограничением единственное решение, которое использует одно соединение, будет:

  • открыть sftp подпроцесс в Python
  • последовательность подачи команд ls к нему, одна для каждого каталога
  • парсинг списков каталогов, поступающих на стандартный вывод, производя больше команд ls для каждого найденного подкаталога.
0

Если вы уже используете find локально, как насчет следующего?

echo "! find" | sftp -q [email protected]

Со страницы руководства sftp под Интерактивными командами:

! команда

Выполнить команду в локальной оболочке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню