SCP apenas o último arquivo

0

Eu quero baixar apenas o arquivo mais recente usando o SCP de uma pasta remota. Os arquivos estão no formato raw_201712282131.ubx , onde o número é a data do arquivo.

Se eu fizer este comando no SSH, posso obter o nome do arquivo mais recente:

find -name '*.ubx' | sort -V | tail -1

Como baixar apenas o arquivo mais recente usando o SCP?

    
por bakalolo 29.12.2017 / 04:59

1 resposta

1

Você pode tentar isso e ver se funciona. Funciona bem no macOS, indo a vários servidores Linux (CentOS, Ubuntu, etc…):

RECENT=$(ssh [email protected] ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }');
scp [email protected]:/remote/path/${RECENT} /local/path/${RECENT};

A primeira linha obtém o arquivo mais recente com a extensão .ubx e o atribui à variável $RECENT .

A próxima linha, em seguida, apenas executa o próprio comando SCP. Você pode transformá-lo em um "one-liner" apenas combinando as duas linhas em uma assim:

RECENT=$(ssh [email protected] ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }'); scp [email protected]:/remote/path/${RECENT} /local/path/${RECENT};

E, é claro, você pode definir variáveis para o usuário, hostname, /remote/path/ e /local/path/ e apenas colocá-las em um arquivo de script Bash para executá-las com um comando como get_latest_ubx.sh , para que você não tem que lidar com a digitação de um comando como esse toda vez que você precisar usá-lo.

#!/bin/bash

# Assign the variables.
USER='someone';
HOST='example.com';
LOCAL_PATH='/local/path/';
REMOTE_PATH='/remote/path/';

# Get the most recent '.ubx' file and assign it to 'RECENT'.
RECENT=$(ssh ${USER}@${HOST} ls -lrt ${REMOTE_PATH} | awk '/.ubx/ { f=$NF }; END { print f }');

# Run the actual SCP command.
scp ${USER}@${HOST}:${REMOTE_PATH}${RECENT} ${LOCAL_PATH}${RECENT};
    
por 29.12.2017 / 05:48