В настоящее время я сжимаю список файлов из каталога в следующем формате:
tar -cvjf test_1.tar.gz -T test_1.lst --no-recursion
Приведенная выше команда сжимает только те файлы, которые указаны в списке. Я делаю это, потому что этот список создан так, что он соответствует DVD. Однако во время сжатия степень сжатия уменьшает предполагаемый размер файла, и на DVD остается много свободного места. Это что-то вроде алгоритма ранца.
Я хотел бы оценить размер сжатого файла и добавить еще несколько файлов в список. Я обнаружил, что можно оценить размер файла, используя следующую команду:
tar -cjf - Folder/ | wc -c
Эта команда не принимает параметр списка. Есть ли способ оценить размер сжатого файла? Я также ищу варианты, такие как сценарии Perl и т. Д.
Сжатие будет сильно зависеть от повторения сжимаемого текста. Если ваши файлы представляют собой простой текст и все очень похожи, то вы получите отличное сжатие, если они отличаются, сжатие начнет страдать. И если они уже сжаты (т.е. JPG, MP3 и т. Д.), То сжатие будет еще меньше.
Как вы и предполагали, с помощью алгоритма «ранца» с достаточным временем и ресурсами ЦП, должна быть возможность попробовать все комбинации файлов в одном сжатом tar-файле. К сожалению, это может занять слишком много времени.
Предполагая, что ваши файлы похожи (то есть все они в основном текстовые или все одинаковые файлы), вы сможете получить приблизительную оценку, сжимая каждый файл по отдельности, а затем добавляя размеры вместе для оценки при общем сжатии архив tar.
Единственным недостатком является то, что оценка потерпит неудачу и создаст меньший конечный файл tar.bz2, если файлы похожи, и алгоритм сжатия может использовать сходство в своих интересах.