Получение списка файлов рекурсивно с использованием SFTP в оболочке или Python без дополнительных библиотек - PullRequest
0 голосов
/ 15 января 2019

Я передаю файлы между двумя серверами через 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 user@host.example.com:/path

здесь не очень хорошо отслеживает, так как ему нужен определенный путь. Я мог бы получить список папок в каталоге и выполнить команду sftp для каждой из них, но это много удаленных подключений.

Единственными инструментами удаленного доступа, которые я могу использовать, являются подпроцесс и модуль операционной системы Python. Что-то вроде Paramiko SFTP недоступно.

1 Ответ

0 голосов
/ 16 января 2019

Простое, но неэффективное решение см. В ответе @pasabaporaqui на Список рекурсивно всех файлов в sftp .


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

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