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

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

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

  • Предотвратить перезапись существующих файлов?
  • Как scp через промежуточную машину?
  • Почему режим cp --no-preserve = сохраняет режим? Доступны альтернативные инструменты?
  • SSH на удаленную машину с использованием другого локального идентификатора
  • Копировать поверх ssh и выполнять команды за один сеанс
  • специальные каталоги rsync
    1. Возможность подключения к n номерам таких серверов и копирования файла
    2. Избегайте конфликтов имен локально, возможно, путем префикса файла журнала с именем сервера

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

  • Как клонировать часть только для чтения файловой системы / proc
  • Не удается выполнить SCP, несмотря на то, что SSH работает нормально
  • Как клонировать весь диск на больший диск и затем разгружать?
  • Есть ли опция / команда для дифференциации файлов на основе состояния копии файла в каталоге?
  • Копирование файлов на основе даты / времени из поднабора каталогов
  • SSH легко копирует файл в локальную систему
  • 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 - лучшая ОС в мире.