Я хочу выполнить серию повторных сжатий сжатых файлов, чтобы изучить их свойства.
Сначала я попытался просто сжать файлы .zip
в цикле:
for f in $(seq 1 100)
do
zip $f.zip -9 -v $(($f-1)).zip
done
Начиная с фиксированного файла 0.zip
, я заметил, что, если я перезапущу эти строки, все файлы, кроме первых нескольких, будут иметь разные размеры. После некоторого исследования я понял, что это было вызвано метками времени сжатых файлов. Затем я сбрасываю метки времени перед повторным сжатием:
for f in $(seq 1 100)
do
touch $(($f-1)).zip -t 200101010101
zip $f.zip -9 -v $(($f-1)).zip
done
И на этот раз я получил детерминированные результаты для сжатия с использованием zip
. Однако использование tar
с алгоритмом gzip
прежнему не работает. Каждый раз, когда я бегу:
for f in $(seq 1 100)
do
touch $(($f-1)).tar.gz -t 200101010101
tar cvfz $f.tar.gz $(($f-1)).tar.gz
done
Я получаю файлы разных размеров, от 4.tar.gz
до 100.tar.gz
Почему это происходит, и что я могу сделать, чтобы предотвратить это?