Рассчитать% разницы и размеров файлов между двумя файлами

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

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

2 ответа

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

Другие вопросы по тегам