Como listar arquivos e somente arquivos via SFTP?

6

Eu posso listar nomes de arquivos na verdade, mas muitas coisas indesejadas vêm de lá também.

> echo "ls *.txt" | sftp user@host:/dir
Connected to 1.1.1.1.
Changing to: /dir
sftp> ls *.txt
1.txt
2.txt
3.txt

Existe uma maneira comprovada e confiável de listar arquivos e apenas arquivos? Gostaria de evitar o uso de head como filtros, se possível.

    
por Pavel Vlasov 25.05.2016 / 19:29

3 respostas

4

Use a opção -q para informar sftp a ser q uiet, suprimindo assim a maior parte da saída com a qual você não se importa:

echo "ls *.txt" | sftp -q [email protected]:/path

Você ainda verá as linhas do prompt interativo ao qual você está ecoando, e. g. sftp> ls *.txt , mas esses podem ser filtrados com um grep -v :

echo "ls *.txt" | sftp -q [email protected]:/path | grep -v '^sftp>'

Como um aparte, provavelmente é uma prática melhor usar um arquivo em lote e passá-lo com o parâmetro -b para sftp em vez de echo em um pipeline.

Se tudo que você realmente deseja fazer é obter uma lista de arquivos, isso pode ser mais bem servido com ssh do que com sftp (que, após tudo, é o s ecure f ile t ransfer p rograma):

ssh [email protected] ls -1 /path
    
por 25.05.2016 / 19:45
2
sftp -q user@host:/dir <<<"ls *.txt" | grep -v '^sftp>'

Mas isso só funcionará se o sftp não estiver pedindo por senha. Por causa do grep -v que afetará o sftp em perguntar por senha.

Mas eu acho que é muito simples se você usa tail.

sftp -q user@host:/dir <<<"ls *.txt" | tail -n+2 
    
por 25.05.2016 / 19:45
2

Monte a árvore de diretórios remotos por meio de SSHFS . O SSHFS é um sistema de arquivos remoto que usa o protocolo SFTP para acessar arquivos remotos. Se o servidor permitir o acesso SFTP, você poderá usar o SSHFS (do ponto de vista do servidor, é a mesma coisa). No lado do cliente, você precisa estar autorizado a usar o FUSE , que é o caso da maioria dos unices modernos.

Uma vez que você montou o sistema de arquivos, você pode usar todos os comandos usuais sem ter que se preocupar que os arquivos são realmente remotos.

mkdir host-dir
sshfs user@host:/dir host-dir
echo host-dir/*.txt
…
fusermount -u host-dir
    
por 26.05.2016 / 01:39

Tags