-2

У нас есть два архива, и мы хотели бы сравнить их.

Мы также заинтересованы в расчете процентной разницы между ними и размером файла. Есть ли инструмент, который может сделать это быстро?

2 ответа2

4

Вы можете попробовать скрипт 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 .

0

Вы можете просто написать 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 . Они просто напоминают пользователю, как правильно использовать этот скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .