Как скопировать файл с нескольких серверов в локальную систему?

У нас есть несколько приложений для развертывания на таких серверах, как app00, app01 и т. Д. Мне нужно скопировать один файл журнала со всех этих серверов на мой локальный mac, чтобы я мог выполнять некоторые grepping и cut.

Я использовал csshX для просмотра этого файла, но я не могу найти эквивалент для scp. Я в основном хочу две вещи:

  • Скопировать все файлы с определенным именем файла длины
  • Удаленный ПК, доступный с помощью ssh, scp / rsync, не работает (больше)
  • Как установить отличную от cp?
  • Скопируйте файл и перезапишите существующий файл.
  • scp с одного удаленного сервера на другой удаленный сервер
  • Загрузите файл с любой из двух машин с помощью SCP?
    1. Возможность подключения к n номерам таких серверов и копирования файла
    2. Избегайте конфликтов имен локально, возможно, путем префикса файла журнала с именем сервера

    Как мне это сделать?

  • Предотвращение scp и менее команд, читающих интерактивный скрипт tcsh
  • Shell Script - как scp на удаленный сервер и загружать файлы и защищать пароль
  • rsync обновляет только временную метку
  • Почему определенный путь используется как имя файла при передаче файлов через scp на хост Windows?
  • Как установить отличную от cp?
  • Непрерывная копия. Как скопировать файлы?
  • 5 Solutions collect form web for “Как скопировать файл с нескольких серверов в локальную систему?”

    Это мелочи, связанные с небольшим сценарием. Например:

    for server in app0 app1 app4 app5 appN; do scp user@$server:/path/to/log/file /local/path/to/"$server"_file done 

    Вышеуказанное копирует файл с каждого из серверов последовательно и называет его SERVERNAME_file . Таким образом, файл из app0 будет app0_file и т. Д. Вы можете, очевидно, изменить имена на все, что захотите.

    Используйте GNU parallel :

     parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on 

    В отличие от решений, для которых используется for , это будет запускать все загрузки параллельно

     remote_path="/path/to/file" local_target_dir="/path/to/dir" hosts=(app00 app01) for host in "${hosts[@]}"; do scp "$host":"$remote_path" "$local_target_dir"/filename."$host" done 

    Если вы можете использовать python, есть интересный модуль, который упрощает задачи машинного администрирования ish, называемые fabric: http://docs.fabfile.org/en/latest/tutorial.html

    Я хотел использовать его, но не обошел его

    Это сработало для меня

     #!/bin/bash #Expect script /usr/bin/expect -<<EOD set SERVERS {1 2 3 .. N} foreach SERVER \$SERVERS { spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log expect { -re ".*es.*o.*" { exp_send "yes\r" exp_continue } -re ".*sword.*" { exp_send "pswrd\r" } } expect eof } EOD echo "completed" 
    Linux и Unix - лучшая ОС в мире.