2015-10-21 3 views
0

Я пытаюсь создать простую утилиту, которая скопирует файлы из нескольких каталогов с одного сервера sftp на другой сервер.Каталог опроса с несколькими подкаталогами

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

<int-sftp:inbound-channel-adapter 
     id="pdbInbound" 
     session-factory="sftpSessionFactory"   
     auto-create-local-directory="true" delete-remote-files="true" 
     filename-pattern="*.*" remote-directory="${remote.pdb.directory}" 
     local-directory="${local.pdb.directory}"> 
     <int:poller fixed-rate="5000"/> 
    </int-sftp:inbound-channel-adapter> 

    <int-sftp:inbound-channel-adapter 
     id="galaxyInbound" 
      session-factory="sftpSessionFactory" 
     auto-create-local-directory="true" delete-remote-files="true" 
     filename-pattern="*.*" remote-directory="${remote.galaxy.directory}" 
     local-directory="${local.galaxy.directory}" > 
     <int:poller fixed-rate="5000"/> 
    </int-sftp:inbound-channel-adapter> 

Над кодом работает отлично, и файлы копируются в локальные каталоги, как ожидалось.

Проблема возникает, когда мне необходимо перенести эти файлы в удаленный каталог с той же структурой каталогов, что и исходная директория. Я не смог достичь этого, используя шлюз sftp-outbound с командой = "mput" и command-options = "-R". Итак, я попытался написать два исходящих адаптера, как показано ниже. Но только один каталог записывается на удаленный. Любая идея, что здесь происходит не так?

<int:service-activator input-channel="pdbInbound" output-channel="pdbOutbound" expression="payload"/> 
     <int:service-activator input-channel="galaxyInbound" output-channel="galaxyOutbound" expression="payload"/> 

     <int-sftp:outbound-channel-adapter id="sftPdbOutboundAdapter" auto-create-directory="true" 
      session-factory="sftpSessionFactory" 
      auto-startup="true" 
      channel="pdbOutbound" 
      charset="UTF-8" 
      remote-file-separator="/" 
      remote-directory="${remote.out.pdb.directory}" 
      mode="REPLACE"> 
     </int-sftp:outbound-channel-adapter> 

     <int-sftp:outbound-channel-adapter id="sftpGalaxyOutboundAdapter" auto-create-directory="true" 
      auto-startup="true" 
      session-factory="sftpSessionFactory" 
      channel="galaxyOutbound" 
      charset="UTF-8" 
      remote-file-separator="/" 
      remote-directory="${remote.out.galaxy.directory}" 
      mode="REPLACE"> 
     </int-sftp:outbound-channel-adapter> 

<int:poller default="true" fixed-delay="50"/> 

Примечание: Я использую тот же SFTP сервер (но разные каталоги) для входящих и исходящих файлов для целей тестирования.

ответ

0

Вы должны объяснить свои проблемы более подробно - «не работает» является крайне неадекватным, и вам не поможет здесь с таким вопросом. Вам нужно показать, что вы пробовали, и то, что вы наблюдали.

Имеются тестовые чехлы для recursive mget и recursive mput.

Структура каталогов для тестов показана в комментарии в верхней части этого файла.

Предлагаю вам сравнить их с тем, что вы попробовали, и вернуться сюда, если у вас есть конкретный вопрос/наблюдение. Лучше всего решить эти проблемы - включить ведение журнала DEBUG; в том числе для jsch.

Смежные вопросы