在目录列表之间执行差异的最佳方法是什么?

时间:2011-04-12 17:36:21

标签: perl shell unix

我有兴趣查看目录列表,并将之前的列表与当前目录列表进行比较,并设置脚本来执行此操作。也许在perl或shell脚本中。

我应该使用像diff这样的东西吗?以编程方式,这将是一个理想的方法吗?例如,假设我将diff输出到输出文件,如果没有diff然后退出,如果有结果,我想看到它。

比如说,我今天有以下目录:

/foo/bar/staging/abc
/foo/bar/staging/def
/foo/bar/staging/a1b2c3

第二天看起来像添加或重命名目录:

/foo/bar/staging/abc
/foo/bar/staging/def
/foo/bar/staging/ghi
/foo/bar/staging/a1b2c4

3 个答案:

答案 0 :(得分:2)

可能有更好的方法,但我通常做这样的事情的方法是在每个目录根目录中运行find命令,并将输出传递给单独的文件。然后,您可以使用您选择的diff工具来区分文件。如果要过滤掉某些目录或文件,可以在管道中输入一些grepgrep -v命令,或者可以在find命令上试验选项。

另一个主要选项是找到一个提供目录/文件夹比较的差异工具。大多数商品支持这一点,但我喜欢命令行方法,因为你可以更好地控制你正在分化的东西。

cd /my/directory/one
find . -print | sort > /temp/one.txt

cd /my/directory/two
find . -print | sort > /temp/two.txt

diff /temp/one.txt /temp/two.txt

答案 1 :(得分:0)

还要检查inotifywait命令。它允许您监视RT中的文件。

答案 2 :(得分:0)

您也可以使用-newer开关考虑find命令。

用法是:

find . -newer timefile.txt -print

-newer开关使find返回在指定文件的修改时间之后创建或更新的文件列表。在上面的示例中,将返回在timefile.txt之后创建或更新的任何文件。您必须创建一个timefile.txt文件,最有可能每天一次。某些版本的find具有较新的变体,可与文件的其他时间戳(最后修改,最后访问,最后创建等)进行比较。

但是,此技术不会报告已删除的文件。文件列表的每日差异可以报告。