У нас есть два архива, и мы хотели бы сравнить их.
Мы также заинтересованы в расчете процентной разницы между ними и размером файла. Есть ли инструмент, который может сделать это быстро?
У нас есть два архива, и мы хотели бы сравнить их.
Мы также заинтересованы в расчете процентной разницы между ними и размером файла. Есть ли инструмент, который может сделать это быстро?
Вы можете попробовать скрипт 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
.
Вы можете просто написать Perl-скрипт для выполнения этой работы. Это менее грязно, чем Баш.
Вот пример такого скрипта. Он рассчитывает уменьшение размера файла между исходным и сжатым файлом.
#!/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
. Они просто напоминают пользователю, как правильно использовать этот скрипт.