SCP 仅限最新文件

SCP 仅限最新文件

我想使用 SCP 从远程文件夹下载最新的文件。文件格式为raw_201712282131.ubx数字为文件日期。

如果我在 SSH 中执行此命令,我可以获得最新的文件名:

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

如何使用 SCP 仅下载最新文件?

答案1

你可以尝试一下,看看是否有效。对我来说,在 macOS 上,它可以很好地运行,并且可以连接到各种 Linux(CentOS、Ubuntu 等)服务器:

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

第一行获取最新的扩展名的文件.ubx并将其分配给$RECENT变量。

下一行将运行 SCP 命令本身。你可以将两行合并为一行,使其成为“一行”,如下所示:

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

相关内容