1

Из этого вопроса я знаю, что могу запустить 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 ответ1

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*/ , te grep -v удалит строку, показывающую приглашение sftp и команду: (sftp> ls -1 */*/Folder*/) и sort -u будут показывать только уникальные записи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .