我需要更新 Oracle 的 RDBMS 二进制文件。我正在寻找 perl 脚本或模块,它将显示哪些文件已更改(新的、删除的、修改的等)。我打算在打补丁前后运行一个脚本,然后比较结果。
我将不胜感激,因为谷歌为“perl compare”短语返回了太多结果。
最好的问候,斯科蒂
也许您可以使用 git 并免除您的麻烦。在您想要查看此类数据的目录中初始化一个 repo,提交您的更改,然后使用差异来比较它们。
我知道这可能不适用,而且可能 git add 或 commit 会花费很长时间,但如果可能的话,git 会免费为您提供大量信息。
如果您真的想使用 perl,也许您有兴趣检查 File::Find 模块(walk 函数)并使用 stat 从文件中获取此统计信息。
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;
您可以为每个文件创建一个文件列表和一个校验和,然后diff
在它们上运行吗?
例如,如果你有必要的命令行工具,你可以运行
find [directory] -print0 | sort -z | xargs -0 md5sum
在命令行并比较补丁前后的结果文件。缺失的行对应于已删除的文件,多余的行对应于新文件,更改的校验和对应于修改过的文件。
如果你想使用 perl,你可以用 File::Find 和 Digest::MD5 写一些类似的东西。