我已经连接了 OpenSSH,但是 ssh 的命令是什么来查找所有 *.png 文件并同时递归获取它们
答案1
您可以使用 列出您感兴趣的文件ssh
,然后使用 下载它们scp
:
ssh user@host find /remote_path -iname '*.png' |
while read pngfile; do
scp user@host:"$pngfile" /local_path
done
所有*.png
在下的文件/remote_path
都将被下载至/local_path
,但不会创建远程目录结构(所有文件都会放在同一个目录中),因此如果您在不同的目录中有两个同名的文件,您可能会遇到问题。
编辑
远程find
命令行应该这样修正:
find /remote_path -iname "'*.png'"
其中,需要内部的一对单引号来避免本地 shell 路径名扩展*
,而需要外部的一对双引号来避免远程 shell 路径名扩展*
。
两种类型的引号可以互换,并且可以使用其他语法,如\''*.png'\'
、\""*.png"\"
或"\"*.png\""
。
如果远程主目录中没有 .png,则这两个命令没有区别,但最好还是安全一点。
答案2
我知道的最快方法是远程创建 tar.gz,通过 SSH 传输并在本地解压:
ssh user@remotehost 'find /remote/path/ -name "*.png" -print0 2>/dev/null | xargs -0 tar cfz - ' | tar xvfz -
这将适用于带有空格的文件名,并且比每个文件的scp -r
速度都快得多scp
。