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

时间:2016-04-02 00:45:12

标签: linux bash ssh scp

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

  • 通过SSH服务器循环浏览文件夹中的所有目录
  • 将每个文件夹中的文件(标题为“foo”)下载到本地计算机。

目前,我有:

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

但是,当我访问SSH服务器时,我认为我不能使用scp。有没有办法在这里循环播放所有内容?

2 个答案:

答案 0 :(得分:2)

仅当远程服务器可以访问您自己的系统时,

远程运行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]

答案 1 :(得分:0)

是的,该脚本是传递给ssh的参数,并且在远程计算机上运行,​​这意味着您无法轻松引用自己的计算机以告诉它将文件复制到何处。

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

或者,根据所涉及的尺寸,scp覆盖所有directoryname/,并从那里得到你想要的东西。