有没有办法通过 shell 脚本上的 SFTP 下载与模式匹配的文件?

Is there a way to download files matching a pattern trough SFTP on shell script?

我正在尝试使用

在 linux 服务器上通过 SFTP 下载多个文件
sftp -o IdentityFile=key <user>@<server><<END
    get -r folder
    exit
END

这将下载文件夹中的所有内容。 findgrep 似乎是无效命令,for 循环也是如此。

我需要下载名称中包含字符串的文件,例如

test_0.txt

test_1.txt

but no file.txt

是否需要使用 sftp?像 rsync 这样运行在 ssh 之上的工具具有灵活的 include/exclude 选项。例如:

rsync -a <user>@<server>:folder/ folder/ \
  --include='test_*.txt' --exclude='*.txt'

这需要在远程系统上安装 rsync,但这在当今很常见。如果 rsync 不可用,您可以使用 tar:

做类似的事情
ssh <user>@<server> tar -cf- folder/ | tar -xvf- --wildcards '*/test_*.txt'

这会远程压缩所有文件,但随后只会在接收端提取与您的目标模式匹配的文件。

你真的需要 -r 开关吗? folder 中真的有任何子目录吗?你不提那个。

如果没有子目录,您可以使用简单的 get 和文件掩码:

cd folder
get *test*