![使用 wget 或其他方式从 ftp 服务器获取最新文件](https://linux22.com/image/1219223/%E4%BD%BF%E7%94%A8%20wget%20%E6%88%96%E5%85%B6%E4%BB%96%E6%96%B9%E5%BC%8F%E4%BB%8E%20ftp%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%8E%B7%E5%8F%96%E6%9C%80%E6%96%B0%E6%96%87%E4%BB%B6.png)
答案1
只需在 wget 中添加“-N”选项即可忽略比本地文件更旧的文件。您还可以添加“-nc”以完全跳过已存在的文件,即使 FTP 上的文件较新。
wget -Nftp://id:密码@ftp服务器/目录/*
答案2
答案是您可能无法仅使用 wget 或我所知道的任何其他单一工具来执行此操作。
您可能需要做的是编写一个脚本,该脚本将使用 wget/curl/whatever 从 ftp 服务器请求目录列表。然后,该脚本将根据文件的名称或其他一些条件选择并检索正确的文件。
答案3
我的解决方案是这样的:
curl 'ftp://server.de/dir/'$(curl 'ftp://server.de/dir/' 2>/dev/null | tail -1 | awk '{print $(NF)}')
答案4
也许我的非理想但简单的解决方案对某些人有用。
首先,我已经安装了proftpd。这里是 /ftp 目录树示例:
/ftp/
/ftp/file1
/ftp/file1/subfile1
/ftp/file1/subfile2
/ftp/file2
然后我添加了任务定时任务每分钟执行此脚本:
PACKAGES=$(find /ftp/* -type d -not -name 'lost+found')
for PACKAGE in "${PACKAGES[@]}"; do
echo $(ls -I 'latest' -Atp "${PACKAGE}" | grep -v '/' | head -n 1) > "${PACKAGE}"/latest
done
因此,对于每个文件(或我的情况中的包),您需要创建单独的目录,并且将有文件“latest”,其中包含该目录中最新文件的名称。如果您想获取某个文件的最新版本,那么您只需执行命令即可:
wget ftp://"${FTP_SRV}"/"${FILE}"/$(curl -s ftp://"${FTP_SRV}"/"${FILE}"/latest)