You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:25:31