Bash 脚本:通过 SSH 遍历目录并将它们下载到本地计算机

Bash script: Looping through directories over SSH and downloading them to local machine

我正在尝试编写一个 bash 脚本:

目前,我有:

ssh username@server "for dir in ~/directoryname/*; (... something here!); done"

但是,我不认为在访问 SSH 服务器时可以使用 scp。有什么方法可以循环下载所有内容吗?

运行 scp 远程只有在远程服务器可以访问您自己的系统时才有效。让我们假设它没有。

您可以分两步完成:

ssh username@server "... some script that just echos the paths ..." > log
for line in $(<log); do scp username@server:$line ./dir/$line; done

或者你可以调查一下rsync,这是非常强大的。它有 --include--exclude 选项,可以让你做类似的事情:

rsync -av username@server:~/somepath/ ./somepath/ [--exclude/--include flags]

是的,该脚本是传递给 ssh 的参数,并且在远程机器上 运行,这意味着您不能轻易地引用自己的机器来告诉它把文件复制到哪里.

您可以尝试在本地 运行 的 bash 脚本来获取您正在搜索的目录结构,并使用 scp 复制您有兴趣检索的任何内容。

或者,根据涉及的大小,对整个 directoryname/ 进行 scp,然后从那里得到你想要的。