计算两个文件之间的百分比差异和文件大小

计算两个文件之间的百分比差异和文件大小

我们有两个 zip 文件,想对它们进行比较。

我们还想计算它们之间的百分比差异和文件大小。有没有可以快速完成此操作的工具?

答案1

您可以尝试如下的 Bash 脚本:

#!/bin/bash
SIZE1=$(stat -f "%z" "$1")
SIZE2=$(stat -f "%z" "$2")
PERC=$(bc <<< "scale=2; ($SIZE2 - $SIZE1)/$SIZE1 * 100")
echo "$PERC %"

然后,通过将两个文件作为参数传递来调用脚本。我使用命令stat -f "%z" "$1"获取文件大小,它在 OS X 上有效。根据您的 Linux 发行版,您可能需要不同的语法,例如stat -c%s FILENAME、 或 du -b FILENAME。在您的控制台中尝试,您应该会得到字节数作为输出。

请注意,我们需要调用该程序,bc因为 Bash 不能进行浮点运算。

当然,您可以修改脚本以满足您的需求。如果您需要将两个压缩文件与未压缩文件进行比较,您可以添加另一个变量并使用 进行所需的数学运算bc

答案2

你可以简单地编写一个 Perl 脚本来处理这个任务。它比 Bash 更简洁。

下面是此类脚本的示例。它计算原始文件和压缩文件之间的文件大小减少量。

#!/usr/bin/env perl
use strict;
use warnings;

die "You must define at least 2 files to compare!\n" unless defined $ARGV[0] && defined $ARGV[1];
die "File $ARGV[0] does not exist!\n" unless -e $ARGV[0];
die "File $ARGV[1] does not exist!\n" unless -e $ARGV[1];

my ($original, $compressed) = (-s $ARGV[0], -s $ARGV[1]);

printf "FILESIZE REDUCTION: %.2f%%\n", ($compressed / $original - 1) * -100;

你可以像这样执行它:perl compare_filesizes.pl my_fancy_javascript.js my_fancy_javascript_min.js

注意:您可以引用或删除这些die条件。它们只是为了提醒用户正确使用此脚本。

相关内容