![计算两个文件之间的百分比差异和文件大小](https://linux22.com/image/1356918/%E8%AE%A1%E7%AE%97%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B9%8B%E9%97%B4%E7%9A%84%E7%99%BE%E5%88%86%E6%AF%94%E5%B7%AE%E5%BC%82%E5%92%8C%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F.png)
我们有两个 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
条件。它们只是为了提醒用户正确使用此脚本。