FTP:获取服务器上的最新文件

FTP:获取服务器上的最新文件

我有一个正在运行的 ftp 服务器,它不定期地生成最新文件。该文件存储为:

Home-> T22:30:10-> new.txt,最新的将是(一个新文件夹)

Home-> T23:10:25-> new.txt(注意这是一个最新时间的新文件夹)

我需要在 Linux 机器上实现一些东西(可以是任何东西,C 代码,Bash 脚本等)来拉取最新的文件。

我研究了两种选择:

  1. 使用 libcurl,传递目录列表,然后选择最新文件。这真的很烦人而且很耗时,而且我仍然找不到简单的方法来做到这一点。

  2. 使用lftp,在初始化时,删除服务器中的所有文件,这样每次调用lftp下载东西时,它都是最新的。 (这个方法只是概念性的,我还没有在现实生活中尝试过)。

有更简单的选择吗?

答案1

一种通常很方便的方法是挂载文件,然后像访问普通本地文件一样访问它们。对于通过 FTP 访问的服务器,您可以使用卷曲FTPFS

mkdir theserver
curlftpfs theserver.example.com theserver

您需要将用户名和密码传递给curlftpfs,无论是在命令行上(这是不安全的,因为您计算机上的其他用户能够看到它们)或在文件中~/.netrc(强力推荐)。这是一个 netrc 行示例:

machine theserver.example.com login remoteusername password swordfish

现在您已经将 FTP 服务器作为目录安装在计算机上,您可以使用常用命令,例如lscp等。例如,从按字典顺序排列最后的目录复制文件(如果您的文件名实际上包含时间之前的日期):

set -- theserver/remote/path/T*
eval "last=\${$#}"
cp -p -- "$last/new.txt" "/some/where/local/${last##*/}.txt"

或者复制最新的文件,假设涉及的文件名不包含不可打印的字符或换行符:

cd theserver/remote/path
last=$(ls -t -- T*/new.txt | head -n 1)
cp -p -- "$last" "/some/where/local/${last%/*}.txt"

答案2

如果您可以定期运行脚本,您可以使用wget -N,请参阅:

https://superuser.com/questions/283481/how-do-i-properly-set-wget-to-download-only-new-files


您可以创建一个脚本,例如:

cd /var/download_here/
wget -N ftp://example.com/new.txt --ftp-user="my_user" --ftp-password="my_password"

并添加crontab条目,例如:

*/5 *   * * *   /path/to_script

请注意源文件是如何创建的。如果有东西正在写入并且文件未锁定 - 您最终可能会下载不完整的文件。

相关内容