如何将文件从多个服务器复制到本地系统?

Gau*_*rav 11 scp file-copy

我们在 app00、app01 等服务器上多次部署了一个应用程序。我需要将所有这些服务器中的单个日志文件复制到我的本地 mac 上,以便我可以执行一些 grepping 和剪切。

我使用 csshX 来查看此文件,但找不到 scp 的等效项。我基本上想要两件事:

  1. 能够连接到 n 个这样的服务器并复制文件
  2. 避免在本地命名冲突,方法是在日志文件前加上服务器主机名

我该怎么做呢?

ter*_*don 18

这与一个小脚本无关。例如:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done
Run Code Online (Sandbox Code Playgroud)

以上将依次从每个服务器复制文件并将其命名为SERVERNAME_file. 因此,来自的文件app0将是app0_file等。您显然可以将名称更改为您想要的任何名称。

  • 将 `&` 放在 `scp` 命令的末尾,并在末尾添加一个 `wait`,你就可以在没有额外成本的情况下实现并发。 (3认同)
  • @l0b0 我不知道是否需要。我喜欢这种方法,因为我可以知道是否以及哪些文件无法复制。好的提示,谢谢。 (3认同)

win*_*ner 12

使用GNU 并行

parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on
Run Code Online (Sandbox Code Playgroud)

与使用 a 的解决方案不同for,这将并行运行所有下载


Hau*_*ing 5

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
Run Code Online (Sandbox Code Playgroud)