Linux软件用于通过FTP监视文件夹更改?

我有一个全天候运行的linux系统(Debian)。 我想以这种方式设置它,每天一次它连接到一个特定的FTP服务器,并检查自上次检查以来是否有任何文件已经改变。 如果他们有,它应该给我一个电子邮件与更改的文件列表。

检查不必彻底 – 如果只是比较文件date,我会很高兴。 但它必须是recursion的。

我怎样才能做到这一点? 我知道我可以使用cron来安排这个过程,但是我用什么来连接和检查更改?

ncftp客户端有ncftpls工具可以做一个recursion的长列表。

这是一个使用Net :: FTP的Perl解决scheme。 下面的脚本应该打印文件服务器中每个文件的文件名和时间戳。 您可以轻松地扩展此以适应您的实际需求。

 #!的/ usr / bin中/ perl的

严格使用
使用Net :: FTP;
使用File :: Listing qw(parse_dir);
使用POSIX qw(strftime);

 #configuration选项
我的$ FTP_SERVER ='ftp_host_name';
我的$ FTP_USER ='用户名';
我的$ FTP_PASS ='密码';

 #build立FTP连接
我的$ ftp = Net :: FTP-> new($ FTP_SERVER,Debug => 0)
  或死“无法连接到$ FTP_SERVER:$ @”;
 $ ftp-> login($ FTP_USER,$ FTP_PASS)
  或死“无法login”,$ ftp->消息;
 $ FTP->二进制;

 #获取文件列表
我的$ files = $ ftp-> dir;
 foreach我$入口(parse_dir($文件)){
    我($文件名,$types,$大小,$ mtime,$模式)= @ $条目;
    除非$ type eq'f';
     my $ timeStamp = strftime“%Y-%m-%d%H:%M:%S”,gmtime($ mtime);
    打印“名称:$文件名\ t时间戳:$ timeStamp \ n”;
 }

 $ FTP->退出;

我很确定lftp可以编写脚本来做到这一点; 否则,我只是使用我最喜欢的脚本语言(Ruby / Perl / Python)的FTP库,并以这种方式完成这项工作。

这是一个shell脚本来帮助你的方式。 如果你可以通过ssh执行这个,那么你就完成了。 如果你必须通过FTP来做,那么你会遇到我的老朋友期待 。 祝你好运!

#!/usr/bin/env bash

if [ ! -f .baseline ]; then
echo "No timestamp available for comparison. Exiting."
exit 1
fi

for filename in ./*
do
if [ .baseline -ot "$filename" ]; then
echo "$filename"
fi
done

touch .baseline

使用wget。 第一天:

 wget -r -q --spider --no-remove-listing --ftp-user=YOU --ftp-password=YOURSECRET ftp://YOURSERVER 2>&1 

该命令将生成一个名为YOURSERVER的本地目录,下面有一个下载的目录树,但每个目录只包含一个名为“.listing”的文件。 可以使用diff命令将.listing文件与旧版本进行比较。

现在每天:

 mv YOURSERVER PREVIOUS_DIR wget as above diff -r YOURSERVER PREVIOUS_DIR 

这将打印所有不同的行,cron应自动将结果邮寄给您。