【问题标题】:How to show subdirectories using SFTP ls command如何使用 SFTP ls 命令显示子目录
【发布时间】:2021-10-24 12:20:21
【问题描述】:

我正在尝试获取文件夹中的子目录列表

echo "ls -1 /path/to/folder/*/" | sftp -i /path/to/key user@host | grep -v 'sftp>'

如果有多个子目录,我会得到子目录列表:

/path/to/folder/subdirectory1/
/path/to/folder/subdirectory2/

如果只有一个子目录,我什么也得不到。

感谢您的建议。

注意:不允许使用 SSH

【问题讨论】:

    标签: bash scripting sftp


    【解决方案1】:

    如果只有一个子目录,我什么也得不到。

    如果只有一个子目录是空的,你应该什么也得不到,因为ls如果给定一个目录参数会列出它的内容。对于普通的ls,我们可以简单地通过选项-d 解决这个问题,但不幸的是sftpls 没有该选项。我想到的唯一方法是从长列表中过滤所需的目录:

    echo "ls -l /path/to/folder" | sftp -i /path/to/key user@host | awk '/^d/{print "/path/to/folder/"$NF}'
    

    【讨论】:

    • 即使都是空的,获取子目录列表也没有问题。但是如果文件夹中有唯一的子目录是不可能的
    • 我描述了差异的来源。你试过我的建议了吗,你还觉得不可能吗?
    • 完美运行。感谢您的意见!还有一个问题 - 是否可以将行尾 \n 附加到字符串的末尾? printf '%s\n' 之类的东西?
    • Hm - 显示的awk print 命令已经附加了一个\n;当然如果你想要另一个,你可以写print "/path/to/folder/"$NF"\n"
    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 2016-06-18
    • 2017-01-24
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多