1

我需要更新 Oracle 的 RDBMS 二进制文件。我正在寻找 perl 脚本或模块,它将显示哪些文件已更改(新的、删除的、修改的等)。我打算在打补丁前后运行一个脚本,然后比较结果。

我将不胜感激,因为谷歌为“perl compare”短语返回了太多结果。

最好的问候,斯科蒂

4

3 回答 3

3

也许您可以使用 git 并免除您的麻烦。在您想要查看此类数据的目录中初始化一个 repo,提交您的更改,然后使用差异来比较它们。

我知道这可能不适用,而且可能 git add 或 commit 会花费很长时间,但如果可能的话,git 会免费为您提供大量信息。

如果您真的想使用 perl,也许您有兴趣检查 File::Find 模块(walk 函数)并使用 stat 从文件中获取此统计信息。

于 2012-05-11T14:21:10.853 回答
2
use strict;
use warnings;
use Path::Class;
use Digest::MD5;
use Data::Dumper; # Dumper
use Text::Diff; # diff

That's the modules I use for a script of mine that does just that (to track ZIP/PDF/CHM in a directory and eliminate duplicates). Use Path::Class::Dir->traverse to walk the directory, Digest::MD5 and stat to track file identity (for renames) by not recalculating checksums when file size and mtime are identical (safe enough for my purposes), Data::Dumper to load last time's results and save the new ones, and Text::Diff to compare text file versions of the old and new data and print a diff as a report. If you want to look at Dumper output, consider setting the following options for readability:

$Data::Dumper::Terse    = 1;
$Data::Dumper::Indent   = 1;
$Data::Dumper::Sortkeys = 1;
于 2012-05-11T19:06:33.737 回答
1

您可以为每个文件创建一个文件列表和一个校验和,然后diff在它们上运行吗?

例如,如果你有必要的命令行工具,你可以运行

find [directory] -print0 | sort -z | xargs -0 md5sum

在命令行并比较补丁前后的结果文件。缺失的行对应于已删除的文件,多余的行对应于新文件,更改的校验和对应于修改过的文件。

如果你想使用 perl,你可以用 File::Find 和 Digest::MD5 写一些类似的东西。

于 2012-05-11T18:50:33.630 回答