Shell lê roteiro para sftp

2

Eu tenho esse trabalho:

% cat read.sh
!/bin/sh

file=list.txt

while read line
do
    echo "$line"
cut -d' ' -f27 | sed -n '$p' > file2
done < "$file"


% cat list.txt 
sftp> #!/bin/sh
sftp> 
sftp> cd u/aaa
sftp> ls -lrt x_*.csv
-rwxr-xr-x    0 1001     1001     12274972 May 13 21:07 x_20150501.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150601.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150701.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150801.csv
-rw-r--r--    0 1001     1001            0 May 13 21:44 x_20150901.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151001.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151101.csv
-rw-r--r--    0 1001     1001            0 May 13 21:45 x_20151201.csv

% cat file2 
x_20151201.csv

Primeira pergunta: Existe algo mais fascinante para ler apenas o último item da última linha? Você usaria corte e sed? Este é um redirecionamento de uma lista direta de sftp.

Segunda pergunta: O que quer que esteja no arquivo2, quero que ele seja lido em um arquivo de lote sftp para obter o arquivo exato.

% cat fetch.sh 
#!/bin/sh

cd u/aaa
!sh read.sh
!< file2 
get
bye

Como você pode imaginar, o sftp não gosta de get fornecido sem nenhum arquivo, então como eu posso ler no arquivo2 para obter esse arquivo do servidor sftp?

 % sftp -b fetch.sh user@pulse
    sftp> #!/bin/sh
    sftp> 
    sftp> cd u/aaa        
    sftp> !sh read.sh
    sftp> #!/bin/sh
    sftp> !< file2 
    x_20151201.csv
    sftp> get
    You must specify at least one path after a get command.
    
por Registered User 15.05.2015 / 08:39

1 resposta

2

Você pode combinar todas as ações em um comando:

sftp user@host:/path/to/file/$(tail -1 file1.txt |tr -s ' ' |cut -d ' ' -f 9)

Isso irá buscar o arquivo no diretório de trabalho atual. Se você precisar buscar o arquivo em outro diretório, especifique o diretório de destino como um próximo argumento para o comando sftp.

    
por 15.05.2015 / 08:55