Como faço para passar uma variável para o sftp?

1

Estou tentando corresponder um nome de arquivo a uma string, que é basicamente um timestamp, durante uma conexão SFTP.

Como faço para corresponder parte do nome do arquivo? Eu não consigo declarar uma variável dentro de uma conexão SFTP. E nem eu posso chamar uma variável criada no Bash antecipadamente.

Editar: coisas que tentei

yr=$(date + "%Y")
sftp -i key.pem un@server
sftp> echo $yr
Invalid command.
sftp> $yr
Invalid command.

novo shell

sftp -i key.pem un@server
sftp> test=$(date +"%Y")
Invalid command.

Tentei esses 2

    
por simplycoding 10.09.2015 / 18:34

2 respostas

2

O programa sftp é sua própria coisa; é completamente independente e não relacionada a bash , que conhece o valor de suas variáveis e expande $yr . Em geral, você não pode passar variáveis bash para programas externos como esse, sem métodos de comunicação específicos para aplicativos.

Se você quiser apenas carregar ou baixar um arquivo com $yr no nome do arquivo, use scp , algo como:

yr=$(date +%Y)
scp -i key.pem un@server:/some/long/path/that/includes/$yr .

para download ou

scp -i key.pem some_local_file un@server:/some/long/$yr/path

para upload.

Se, por algum motivo, você realmente precisar usar sftp especificamente, poderá criar um arquivo em lote dinamicamente, por exemplo,

sftp -i key.pem -b - un@server <<< "get /some/path/with/$yr"
    
por 10.09.2015 / 19:51
2

sftp é um programa independente, não faz parte do shell. Não entende a sintaxe do shell. Não possui recursos como expansão de variáveis e instruções condicionais.

A maneira mais fácil de fazer coisas complexas sobre o SFTP é usar SSHFS . O SSHFS é um sistema de arquivos que usa SFTP para fazer um sistema de arquivos remoto aparecer como um filessytem local. No cliente, o SSHFS requer o FUSE , que está disponível na maioria dos unices modernos. No servidor, o SSHFS requer SFTP; Se o servidor permitir SFTP, você poderá usar o SSHFS com ele.

mkdir server
sshfs -o IdentityFile=key.pem un@server: server
cp "server/dir/myfile-$(date +%Y).txt" /local/path
fusermount -u server
    
por 11.09.2015 / 04:11