如何在 SFTP 中使用“ls -d”?

如何在 SFTP 中使用“ls -d”?

这个问题我知道我可以运行ls -d来仅显示目录名称而不是其内容。

简短问题:

如何用 做同样的事情sftp

具体问题:

我有一个应该收集目录的脚本:

echo ls -1 '*/*/Folder*' | sftp -i /path/to/key user@host

如果有多个文件夹匹配,我会收到文件夹列表:

path/to/Folder1
path/to/Folder2
[...]

如果只有一个文件夹匹配,我会收到该文件夹​​的内容:

path/to/Folder1/File1
path/to/Folder1/File2
[...]

但我只想看到这一点:

path/to/Folder1

笔记:

  • ssh -c由于我没有完全访问权限,因此我无法使用。

答案1

ls在中运行时sftp,您运行的不是系统可执行文件ls,而是作为环境内部命令包含的精简版本sftp-d此版本不支持 选项,因为它不是ls您熟悉的实际版本,并且仅支持一组有限的选项(请参阅环境help中的sftp选项):

ls [-1afhlnrSt] [path]             Display remote directory listing

因此,您唯一的选择是解析输出:

echo ls -1 '*/*/Folder*' | sftp -i /path/to/key user@host |
    sed -E 's|(.*/Folder*[^/]*/).*|\1|' | grep -v '^sftp' | sort -u

sed删除 之后的所有内容*/*/Folder*/,tegrep -v将删除显示提示符sftp和命令运行的行(sftp> ls -1 */*/Folder*/),并且sort -u将仅显示唯一的条目。

相关内容