Я хочу скачать только последний файл с помощью SCP из удаленной папки. Файлы находятся в формате raw_201712282131.ubx где число - это дата файла.

Если я делаю эту команду в SSH, я могу получить последнее имя файла:

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

Как загрузить только последний файл с помощью SCP?

1 ответ1

1

Вы можете попробовать это и посмотреть, работает ли это. Он отлично работает для меня на macOS, идущих на различные серверы Linux (CentOS, Ubuntu и т.д.):

RECENT=$(ssh someone@example.com ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }');
scp someone@example.com:/remote/path/${RECENT} /local/path/${RECENT};

Первая строка получает самый последний файл с расширением .ubx и назначает его переменной $RECENT .

Следующая строка просто запускает саму команду SCP. Вы можете превратить его в «одну строку», просто объединяя обе строки в одну, например так:

RECENT=$(ssh someone@example.com ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }'); scp someone@example.com:/remote/path/${RECENT} /local/path/${RECENT};

И, конечно же, вы можете просто установить переменные для пользователя, имени хоста, /remote/path/ и /local/path/ и просто поместить его в файл сценария Bash, чтобы запустить его одной командой, такой как get_latest_ubx.sh чтобы вы не Тебе приходится иметь дело с вводом такой команды каждый раз, когда тебе нужно ее использовать.

#!/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};

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .