我想使用 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};