用于监控 FTP 上文件夹变化的 Linux 软件?

用于监控 FTP 上文件夹变化的 Linux 软件?

我有一台 24/7 全天候运行的 Linux 机器(Debian)。我想这样设置它,每天一次连接到特定的 FTP 服务器并检查自上次检查以来是否有任何文件发生更改。如果有,它应该向我发送一封电子邮件,其中包含已更改文件的列表。

检查不必非常彻底 - 如果只是比较文件日期我就很高兴了。但它必须是递归的。

我该怎么做?我知道我可以使用 cron 来安排进程,但我该用什么来连接并检查更改?

答案1

ncftp 客户端具有ncfpls可以执行递归长列表的工具。

答案2

这是使用 Net::FTP 的 Perl 解决方案。以下脚本应打印文件服务器中每个文件的文件名和时间戳。您可以轻松扩展它以满足您的实际需求。

/usr/bin/perl 的 #!

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

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

# 建立 FTP 连接
我的 $ftp = Net::FTP->new($FTP_SERVER, Debug => 0)
  或死亡“无法连接到$FTP_SERVER:$@”;
$ftp->login($FTP_USER,$FTP_PASS) 复制代码
  或者死亡“无法登录”,$ftp->message;
$ftp->二进制;

# 获取文件列表
我的$files = $ftp->dir;
foreach 我的 $entry (parse_dir($files)) {
    我的($fileName,$type,$size,$mtime,$mode)= @$entry;
    下一步除非 $type eq 'f';
    我的 $timeStamp = strftime "%Y-%m-%d %H:%M:%S", gmtime($mtime);
    打印“名称:$fileName\t时间戳:$timeStamp\n”;
}

$ftp->退出;

答案3

我很确定 lftp 可以编写脚本来执行此操作;否则,我只会使用我最喜欢的脚本语言(Ruby/Perl/Python)的 FTP 库并以这种方式完成工作。

答案4

使用 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 会自动将结果邮寄给您。

相关内容