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

如何仅通过1次SSH请求获取Linux服务器所有目录及对应所有者信息

解决方法

核心思路

仅发起1次SSH请求,直接在Linux服务端通过单条命令一次性拿到所有目录的所有者+路径结果,不需要为每个目录单独发起请求,耗时和你原有查询全量目录的操作基本一致。

具体命令方案

方案1:GNU Linux环境通用(绝大多数服务器默认支持)

直接替换你原来的find命令即可:

find . -type d -printf "%u %p\n" > myfile.txt

参数说明:

  • %u:输出目录的所有者用户名
  • %p:输出目录的完整相对路径
  • \n:每条结果单独换行
    输出直接符合「所有者 目录路径」的格式要求,无需额外复杂解析。

方案2:兼容非GNU环境(BSD、嵌入式Linux等)

如果服务端find不支持printf参数,使用find配合stat实现同样效果:

find . -type d -print0 | xargs -0 stat -c "%U %n" > myfile.txt

说明:

  • -print0和xargs -0配合兼容包含空格、特殊字符的目录路径
  • stat的%U对应所有者用户名,%n对应目录路径

Python调用示例

直接复用你原有SSH连接逻辑,仅执行一次命令拉取全量结果即可:

import paramiko

# 原有SSH连接配置逻辑保留即可
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='你的服务器地址', username='SSH用户名', password='SSH密码')

# 仅执行1次命令拉取全量结果
stdin, stdout, stderr = ssh.exec_command('find . -type d -printf "%u %p\\n"')
result = stdout.read().decode('utf-8').strip().split('\n')

# 简单解析即可得到目录和所有者的映射关系
dir_owner_info = []
for line in result:
    if not line:
        continue
    # maxsplit=1避免路径中包含空格导致拆分错误
    owner, dir_path = line.split(maxsplit=1)
    dir_owner_info.append((owner, dir_path))

ssh.close()

优势

  • 全程仅1次SSH请求,相比原来数千次请求耗时降低99%以上
  • 原生命令输出格式规整,无需解析ls -la的复杂输出,出错概率极低
  • 自动兼容带特殊字符、空格的目录路径,不需要额外做转义处理

内容的提问来源于stack exchange,提问作者Harshit Jindal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:24:04