有没有办法通过 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
这将下载文件夹中的所有内容。 find
和 grep
似乎是无效命令,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*
我正在尝试使用
在 linux 服务器上通过 SFTP 下载多个文件sftp -o IdentityFile=key <user>@<server><<END
get -r folder
exit
END
这将下载文件夹中的所有内容。 find
和 grep
似乎是无效命令,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*