Python中如何通过SCP批量复制同前缀带日期后缀的文件?
批量复制前缀匹配的远程文件
针对你需要复制远程目录下所有以example开头的文件(排除无关文件和文件夹)的需求,提供两种可靠的实现方式:
方法1:先筛选文件再批量复制(推荐,精准过滤)
这种方式先通过SSH命令在远程端筛选出符合条件的文件,再逐个复制,能确保只复制目标文件,不会误带文件夹。
假设你已经通过paramiko建立了SSH连接,并且初始化了SCPClient实例,代码示例如下:
import paramiko from scp import SCPClient # 已有的SSH连接(假设已完成认证) ssh = paramiko.SSHClient() # 初始化SCPClient scp = SCPClient(ssh.get_transport()) # 远程目标文件夹、本地存储文件夹 host_folder = "/path/to/remote/target/" local_folder = "/path/to/local/destination/" # 执行远程find命令,筛选当前目录下以example开头的文件(不递归子目录) stdin, stdout, stderr = ssh.exec_command( f'find {host_folder} -maxdepth 1 -type f -name "example*"' ) # 获取筛选后的文件列表 remote_target_files = stdout.read().decode().splitlines() # 遍历复制每个文件 for file_path in remote_target_files: scp.get(file_path, local_folder) # 关闭连接 scp.close() ssh.close()
命令说明
find {host_folder}:指定远程搜索目录-maxdepth 1:限制仅搜索当前目录,不递归子文件夹-type f:仅匹配文件,排除文件夹-name "example*":匹配所有以example开头的文件名(兼容带点和不带点的后缀格式,比如example.0411、example0324)
方法2:直接用通配符批量复制(简便但需注意过滤)
如果远程端的shell支持通配符解析,可以直接通过scp.get传递带通配符的路径,一步完成复制:
scp.get(f"{host_folder}example*", local_folder)
注意事项
- 若远程目录下存在以
example开头的文件夹,这种方式会连同文件夹一起复制,若需避免则优先用方法1 - 如果远程文件夹路径包含空格,需用引号包裹路径:
scp.get(f'"{host_folder}example*"', local_folder)
内容的提问来源于stack exchange,提问作者martinmistere
相关产品推荐
相关产品推荐

