如何在Unix服务器的SFTP中获取并打印带路径的文件名?
解决SFTP获取文件时仅拿到文件名、缺失路径的问题
我来帮你搞定这个问题!通常在处理SFTP文件时只拿到文件名而丢了路径,大概率是因为你只提取了文件的基础名称(basename),没有保留完整的远程路径信息。下面以Python常用的paramiko库为例,给你两种实用的解决思路:
1. 递归遍历目录时自动拼接完整路径
如果需要批量获取某个目录下所有文件的完整路径,可以用递归遍历的方式,把目录路径和文件名拼接起来:
import paramiko # 建立SFTP连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('你的SFTP服务器地址', username='用户名', password='密码') sftp = ssh.open_sftp() # 定义递归函数,获取所有文件的完整远程路径 def collect_files_with_full_path(sftp, target_dir): files_list = [] # 遍历目录下的所有条目(包含文件和子目录) for entry in sftp.listdir_attr(target_dir): full_path = f"{target_dir}/{entry.filename}" # 判断是否为目录,如果是则递归遍历子目录 if entry.st_mode & 0o40000: files_list.extend(collect_files_with_full_path(sftp, full_path)) else: files_list.append(full_path) return files_list # 调用函数,替换成你的目标远程目录 all_files = collect_files_with_full_path(sftp, '/你的远程目录路径') # 输出所有带完整路径的文件 for file in all_files: print(file) # 关闭连接 sftp.close() ssh.close()
2. 单个文件操作时手动拼接完整路径
如果只是处理单个文件,直接把远程目录和文件名拼接成完整路径即可:
remote_directory = '/remote/target/folder' file_name = 'test_file.txt' full_remote_path = f"{remote_directory}/{file_name}" # 后续可以用这个完整路径做下载、查看文件属性等操作 # 比如下载到本地: # sftp.get(full_remote_path, '/local/save/path/test_file.txt')
通用思路提醒
不管你用的是哪种SFTP工具或语言库,核心逻辑都是一样的:不要只提取孤立的文件名,要始终保留文件所在的目录路径,并将二者拼接成完整的远程路径。
内容的提问来源于stack exchange,提问作者Midhun
相关产品推荐
相关产品推荐

