Mamy dwa pliki zip i chcielibyśmy je porównać.
Jesteśmy również zainteresowani obliczeniem różnicy procentowej między nimi a rozmiarem pliku. Czy istnieje narzędzie, które może to zrobić szybko?
Mamy dwa pliki zip i chcielibyśmy je porównać.
Jesteśmy również zainteresowani obliczeniem różnicy procentowej między nimi a rozmiarem pliku. Czy istnieje narzędzie, które może to zrobić szybko?
Odpowiedzi:
Możesz spróbować skryptu basha takiego jak ten:
#!/bin/bash
SIZE1=$(stat -f "%z" "$1")
SIZE2=$(stat -f "%z" "$2")
PERC=$(bc <<< "scale=2; ($SIZE2 - $SIZE1)/$SIZE1 * 100")
echo "$PERC %"
Następnie wywołujesz skrypt, przekazując dwa pliki jako argumenty. Użyłem polecenia stat -f "%z" "$1"
aby uzyskać rozmiar pliku i działa na OS X. W zależności od dystrybucji Linuksa może być potrzebna inna składnia, na przykład stat -c%s FILENAME
lub du -b FILENAME
. Spróbuj w konsoli, powinieneś otrzymać liczbę bajtów jako wynik.
Zauważ, że musimy wywołać program bc
ponieważ Bash nie może wykonywać arytmetyki zmiennoprzecinkowej.
Oczywiście możesz zmodyfikować skrypt, aby spełnić swoje potrzeby. Jeśli chcesz porównać dwa skompresowane pliki za pomocą nieskompresowanego pliku, możesz dodać inną zmienną i wykonać żądaną matematykę bc
.
Możesz po prostu napisać skrypt Perla do obsługi zadania. Jest mniej brudny niż Bash.
Oto przykład takiego skryptu. Oblicza zmniejszenie rozmiaru pliku między oryginalnym i skompresowanym plikiem.
#!/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;
Wykonujesz to w ten sposób: perl compare_filesizes.pl my_fancy_javascript.js my_fancy_javascript_min.js
UWAGA: Możesz wycenić lub usunąć die
warunki. Są tylko po to, aby przypomnieć użytkownikowi, aby prawidłowo używał tego skryptu.
cmp
przeciwdiff
.