Могу ли я получить процент от того, насколько один файл отличается от другого? - PullRequest
3 голосов
/ 10 августа 2009

Я разыскиваю кучу бинарных файлов, рекурсивно.

В основном, я бегу:

diff --recursive --brief dir_a dir_b

И это говорит мне, какие файлы отличаются, а какие присутствуют только в одном из местоположений.

Я бы хотел получить немного больше информации, примерно, насколько они отличаются друг от друга. Процент будет делать.

Есть ли простой, неаккуратный, относительно быстрый способ сделать это?

Относительно метрики

Итак, большинство респондентов задаются вопросом о том, как я хочу рассчитать процент, и ответ, мне очень все равно. Я думаю, что что-то в строках разного размера над составным размером обоих файлов подойдет. Но если есть что-то еще, которое использует другую метрику, я беру это. Мне просто нужно приблизительное значение.

git имеет тенденцию показывать какую-то разницу в процентах для коммитов, есть идеи, какой здесь будет метрика?

Ответы [ 5 ]

1 голос
/ 10 августа 2009

Полагаю, этот скрипт печатает какой-то процент.

#!/bin/sh

file1="$1"
file2="$2"

file1size=$( cat $file1 | wc -c )
file2size=$( cat $file2 | wc -c )

if [ $file1size -lt $file2size ]; then
    size=$file1size
else
    size=$file2size
fi

dc -e "
3k
$( cmp -n $size -l $file1 $file2 | wc -l )
$size
/
100*
p"
1 голос
/ 10 августа 2009

Поскольку вы используете двоичные файлы, diff или diffstat не очень полезны. Понятие «различие» также не так ясно, как в случае текстовых файлов, ориентированных на строки.

Одна идея состоит в том, чтобы использовать двоичный инструмент сравнения, такой как bsdiff или xdelta , чтобы сгенерировать двоичный патч с нулевым сжатием, а затем сравнить размер патча с размером оригинальный.

0 голосов
/ 10 августа 2009

не совсем уверен, как вы хотите определить, «насколько отличается», но вы можете посчитать количество элементов в каждом каталоге и поделить на общее количество, чтобы получить процент

# diff -r /tmp /home | awk -F":" '{_[$1]++}END{for(i in _) print _[i],i}'
74 Only in /tmp
29 Only in /home

выше просто распечатывает числа. Определите метрику самостоятельно.

0 голосов
/ 10 августа 2009

Посмотрите программу "diffstat". Это даст вам лучшую идею.

0 голосов
/ 10 августа 2009

Я не уверен, как вы хотели бы измерить проценты. Однако вы можете создать скрипт, который читает вывод вашей команды diff и каким-то образом вычисляет проценты. Но сначала вам нужно узнать, какой показатель вы хотите использовать.

...