Como posso usar 'ls -d' no SFTP?

1

De esta pergunta Eu sei que posso executar ls -d para mostrar apenas os nomes dos diretórios em vez de seus conteúdos.

Pergunta curta:

Como fazer o mesmo com sftp .

Problema específico:

Eu tenho um script que deve reunir diretórios:

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

Se houver mais de uma pasta correspondente, receberei uma lista das pastas:

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

Se houver apenas uma pasta correspondente, recebo o conteúdo dessa pasta:

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

Mas eu gostaria de ver apenas isto:

path/to/Folder1

Nota:

  • Não posso usar apenas ssh -c , pois não tenho acesso total.
por RoVo 08.11.2017 / 10:23

1 resposta

1

Ao executar ls em sftp , você não está executando o executável do sistema ls , mas uma versão simplificada incluída como um comando interno do ambiente sftp . A opção -d não é suportada por esta versão, pois não é o% realls com o qual você está familiarizado e suporta apenas um conjunto limitado de opções (consulte help no ambiente sftp ):

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

Então, sua única opção é analisar a saída:

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

O sed removerá qualquer coisa depois que */*/Folder*/ , te grep -v removerá a linha que mostra o prompt sftp e o comando run ( sftp> ls -1 */*/Folder*/ ) e sort -u mostrarão apenas entradas exclusivas.

    
por 08.11.2017 / 12:25

Tags