Bash 脚本:通过 SSH 遍历目录并将它们下载到本地计算机
Bash script: Looping through directories over SSH and downloading them to local machine
我正在尝试编写一个 bash 脚本:
- 通过 SSH 服务器遍历文件夹中的所有目录
- 将每个文件夹中的文件(标题为 "foo")下载到本地计算机。
目前,我有:
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,然后从那里得到你想要的。
我正在尝试编写一个 bash 脚本:
- 通过 SSH 服务器遍历文件夹中的所有目录
- 将每个文件夹中的文件(标题为 "foo")下载到本地计算机。
目前,我有:
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,然后从那里得到你想要的。