匹配特定模式和扩展名的文件SCP传输

9
我正在尝试从远程主机将文件SCP到本地主机。
远程主机上的文件应该是KMST_DataFile_[MMDDYY]T[HHMM].kms。
我想出了两个SCP命令,但我想知道是否有一种方法可以将它们结合起来,只SCP与上述文件名模式和扩展名.kms匹配的文件。
scp -v user@remotehost:/location/KMST_DataFile_*
scp -v user@remotehost:/location/{*.kms}

2
你需要明白未被引用的元字符,例如 *,会被本地 shell(即在你的本地机器上)扩展。 - Jens
4个回答

13
这将完成您的工作:
scp -v user@remotehost:/location/KMST_DataFile_*.kms

正如评论中@manu所提到的,在Ubuntu或Mac上,您可能需要转义星号:

scp -v user@remotehost:/location/KMST_DataFile_\*.kms

1
真的没有帮助,还是我错了?至少从 MacOS 到 Ubuntu,星号没有被展开。 - Bouncner
你必须转义星号字符,这样它会更像这样: scp -v user@remotehost:/location/KMST_DataFile_*.kms - sale108
2
在MacOS上,您需要使用反斜杠转义*,例如scp -v user@remotehost:/location/KMST_DataFile_\*.kms才能使其正常工作。 - manu

5

你应该使用 \* 代替使用 *

scp -v user@remotehost:/location/KMST_DataFile_\*


3
重点是即使你复制的是文件而不是目录,也要使用递归模式-r。这很重要。
如果你想复制以“val”开头且包含字符串“v2”的文件,请使用以下命令:
scp -r makis@server.gr:/media/Data/results/val*v2* /Users/makis/Desktop/

这里的vecs*v2*会展开并仅获取以val开头且包含v2字符串的文件。


同样地,如果文件以.png结尾,例如使用:

scp -r makis@server.gr:/media/Data/results/val*.png /Users/makis/Desktop/

0
ssh user@host 'tar cf - /location/KMST_DataFile_* /location/{*.kms}' | tar tvpf -

请注意,这些tar选项仅提供目录表。在提取之前,您需要检查并几乎肯定删除绝对路径。

还要注意的是,这并不是以聪明的通配符方式回答问题,即一个文件通配符可以捕获所有文件,而是更一般化的解决方案,用于当文件通配符无法解决问题时。 - Erik Bennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接