我们在 app00、app01 等服务器上部署了多个应用程序。我需要将所有这些服务器中的单个日志文件复制到我的本地 Mac 上,以便我可以执行一些 grep 和剪切。
我使用 csshX 查看此文件,但找不到 scp 的等效程序。我主要想要两件事:
- 能够连接到 n 个此类服务器并复制文件
- 可以通过在日志文件中添加服务器主机名前缀来避免本地命名冲突
我该怎么做呢?
答案1
这对于一个小脚本来说是微不足道的。例如:
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
等。显然,您可以将名称更改为您想要的任何名称。
答案2
使用GNU并行:
parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on
与使用 的解决方案不同for
,这将并行运行所有下载
答案3
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
答案4
这对我有用
#!/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"