Это концепция, которая меня интересует некоторое время, хотя я еще не успел написать сценарий для нее, так как был немного занят!
У программного обеспечения нет простого способа узнать, к чему что-то сжимать, без предварительного запуска файлов по алгоритму (имейте в виду, что tar - это всего лишь архиватор, а не утилита сжатия, но вы можете использовать его с gzip). Другой (более простой) вариант - продолжать добавлять файлы в архив, а затем каждый раз проверять размер. Я не знаю ни одного готового решения для достижения этой цели, но это может быть реализовано в несколько строк кода!
Основная логика будет выглядеть примерно так:
Это зависит от того, какую утилиту вы используете. Некоторые не имеют переключателей, которые позволяют легко удалить файл из архива, поэтому вам может потребоваться добавить вторую переменную ввода для свободы действий. Эта вторая переменная может определить приблизительный максимальный размер файла в каталоге, и, если размер архива больше указанного размера, он добавит его в файл. Если не хватит места, архив закроется и создаст новый. Конечно, вы можете настроить этот алгоритм на бесконечность, гарантируя, что размер следующего файла проверяется и сравнивается с текущим размером архива. Вы, вероятно, также захотите сначала использовать самые большие файлы, так как вы можете видеть, что много логики может пойти на это.
К сожалению, это не полное решение, но я надеюсь, что это хорошая отправная точка!