![如何在 SFTP 中使用“ls -d”?](https://linux22.com/image/1545597/%E5%A6%82%E4%BD%95%E5%9C%A8%20SFTP%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E2%80%9Cls%20-d%E2%80%9D%EF%BC%9F.png)
从这个问题我知道我可以运行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
将仅显示唯一的条目。