Есть ли какой-нибудь внешний инструмент, который даст соответствующую контрольную сумму gzip -lv? - PullRequest
0 голосов
/ 10 декабря 2010

gzip выдаст контрольную сумму каждого файла при заданных параметрах -l и -v, например:

$ echo foo > foo
$ gzip foo
$ gzip -lv foo.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 7e3265a8 Dec 10 17:37                  28                   4 150.0% foo

Есть ли какой-нибудь внешний инструмент, с помощью которого я могу получить такую ​​же контрольную сумму?

md5sum, cksum и sum выполняют аналогичную роль, но не дают соответствующий код (гекс 3915528286 - это e962385e).

$ echo foo > foo
$ md5sum foo
d3b07384d113edec49eaa6238ad5ff00  foo
$ cksum foo
3915528286 4 foo
$ sum foo
00106     1




Дополнительные сведения о приложении:


У нас есть файловая система с большим количеством больших файлов, и новые файлы постоянно копируются.Некоторые из входящих файлов соответствуют файлам, уже существующим, и в этом случае мы хотели бы просто жестко связать существующий файл, чтобы сэкономить место на диске.Для разархивированных файлов md5sum поможет нам сделать это сравнение быстро и эффективно.С другой стороны, файлы gzip часто имеют различную сумму md5 для идентичных данных (из-за отметки времени или владельца, что не имеет значения в этом приложении).Я заметил, что gzip предоставит контрольную сумму для внутренних данных, поэтому для двух файлов gzip я могу просто сравнить списки контрольных сумм плюс размеры.

Я также хотел бы поддержать сравнение файла gzip с «обычным» файлом, и в этом случае мне нужна утилита, которая будет генерировать ту же контрольную сумму извне из gzip.Я полагаю, что простое решение - всегда распаковывать простой файл перед сравнением, но это лишние издержки, которых я бы хотел избежать, поскольку наша система в настоящее время ограничена по времени ЦП.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Короче говоря, я просмотрел источник gzip, сравнил его с источником cksum, внес некоторые изменения и обнаружил, что jacksum использует ту же реализацию, что и gzip.

Так что используйте jacksum. :)

вызов: jacksum -a имя файла crc32

1 голос
/ 11 декабря 2010

Я только что провёл несколько тестов, и хотя jacksum довольно хорош, он занимает немного больше времени и использует намного больше памяти, чем cksfv.

Этот тест был выполнен на виртуальной машине VirtualBox Ubuntu на файле с четырьмя гигабайтами, сгенерированном cat /dev/urandom.Вероятно, вы получите гораздо лучшие скорости на «реальной» машине, но они должны быть в том же соотношении.

Методу gzip / tempfile не хватило места на диске, но мне все равно, потому что он ужепотратил вдвое больше времени.

$ cksum random.dat
1591530146 4388388864 random.dat
5.78user 7.42system 2:53.62elapsed 7%CPU (0avgtext+0avgdata 2896maxresident)k
8480936inputs+0outputs (0major+225minor)pagefaults 0swaps

$ md5sum random.dat
3d6f60f84b2289992abd66428e8a73c4  random.dat
5.57user 8.25system 2:25.97elapsed 9%CPU (0avgtext+0avgdata 2656maxresident)k
8480960inputs+0outputs (1major+209minor)pagefaults 0swaps

$ jacksum -x -a crc32 random.dat
c93b4e20        4388388864      random.dat
3.65user 10.82system 2:19.69elapsed 10%CPU (0avgtext+0avgdata 52224maxresident)k
8490688inputs+152outputs (60major+3936minor)pagefaults 0swaps

$ cksfv random.dat
; Generated by cksfv v1.3.14 on 2010-12-11 at 12:06.31
; Project web site: http://www.iki.fi/shd/foss/cksfv/
;
;     93421568  11:16.12 2010-12-11 random.dat
random.dat C93B4E20
4.42user 8.65system 2:14.42elapsed 9%CPU (0avgtext+0avgdata 2048maxresident)k
8480944inputs+0outputs (1major+171minor)pagefaults 0swaps

$ bash -c gzip -c random.dat > temp.gz && gzip -lv temp.gz

gzip: stdout: No space left on device
Command exited with non-zero status 1
55.54user 6.68system 4:31.56elapsed 22%CPU (0avgtext+0avgdata 4992maxresident)k
2596536inputs+2689840outputs (3major+695minor)pagefaults 0swaps

Я думаю cksfv - мой ответ.

...