gpt4 book ai didi

scripting - 以编程方式比较linux中的文件大小

转载 作者:行者123 更新时间:2023-12-01 07:16:53 24 4
gpt4 key购买 nike

我有一个非常大且复杂的目录结构的两个版本,其中包含数万个单独的文件,我想查找从一个版本到另一个版本的重大文件更改。

每个文件都以某种细微的方式发生了变化。例如,您可能有一个名为 intro.txt 的文件,其中包含

[由 Mike 12:00 完成的 Build 1057] -(版本 1)

[由 Mike 18:10 完成的 Build 1065] -(版本 2)

我不关心这样的变化,因为它们不包含有用的信息。我也不关心拼写错误的更正或添加一两个单词。

我真正想做的是找出哪些文件以更主要的方式发生了变化。他们可能改变的一种方式是添加大量额外的内容,这会增加文件大小——这是我感兴趣的那种改变。

那么,您将如何递归地解析目录以查找从一个版本到下一个版本增加(或减少)一定数量的文件。

我正在运行 linux,但几乎任何语言都可以。

最佳答案

CPAN 上有几个模块可以提供此功能。例如。

  • File::DirCompare
  • File::DirCmp

  • File::DirCompare 看起来最有希望....
     use File::DirCompare;

    File::DirCompare->compare('dirA', 'dirB', sub {
    my ($a, $b) = @_;

    ... callback runs on different or missing files ...
    ... so perform extra checks on files $a & $b here ...

    });

    因此,显示差异超过规定字节数的文件的一个示例是....
    File::DirCompare->compare('dirA', 'dirB', size_diff_by_more_than(1024) );

    sub size_diff_by_more_than {
    my $this = shift;

    return sub {
    my @files = grep { $_ } @_;

    if ( @files == 2 ) {
    # get the two file sizes and report if more than $this
    my @sizes = sort { $a <=> $b } map { (stat)[7] } @files;
    print "Different by more than $this bytes: $files[1]\n"
    if $sizes[1] - $sizes[0] > $this
    }
    else {
    print "Only: $files[0]\n";
    }
    };
    }

    关于scripting - 以编程方式比较linux中的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626701/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com