Linux: сжатие файлов, несмотря на нехватку места на диске

1

Я использую Linux. Некоторое время назад я запрограммировал программу для создания скриншотов, и теперь у меня есть 9 ГБ скриншотов, 60000 JPEG, большинство из них выглядят довольно схоже, и у меня осталось 300 МБ дискового пространства.

Какие есть хорошие способы начать сжимать их (или все) в фоновом режиме, учитывая ограниченное пространство?

Проблема с одновременным сжатием папки заключается в том, что мне не хватит места на диске для этого. Кажется, процесс нужно разбить на куски.

Так что может быть что-то вроде:

  1. Получить список всех файлов
  2. Добавьте часть файлов (скажем, 20) в сжатый архив.
  3. Как только это будет сделано и успешно сохранено, удалите часть файлов
  4. Обработка следующего куска.
Люк Стэнли
источник
Когда вы говорите «сжимать», вы имеете в виду, что хотите запустить их через обычный механизм сжатия (например, gzip, bzip2) (относительно неэффективно) или вы хотите перекодировать JPEG-файлы с более низким качеством?
Майк Фитцпатрик
Я только что сделал LZMA на части, и он уменьшил размер с 4 МБ до 2,3 МБ. Отдельные изображения сами по себе достаточно сжаты, поэтому я не хочу больше сжатия / перекодирования с потерями.
Люк Стэнли
Я сам выяснил это с помощью скрипта Python и 7za: pastebin.com/FZGAmpXB. У меня уже есть почти 400 МБ свободного места, раньше было 300 МБ, и он продолжает расходиться. Мой представитель слишком низок, чтобы опубликовать мой ответ в данный момент. ПРИМЕЧАНИЕ. Он НЕ проверяет, работает ли сжатие («Все в порядке»). Эта часть - DIY банкомат, отключите rm, если хотите.
Люк Стэнли
Если «большинство из них выглядят очень похожими», зачем вам их все держать?
Гленн Джекман
Гленн, если кому-то действительно нужно сжимать файлы, это люди с ограниченным дисковым пространством - это важная проблема, которую нужно решить. Ставить под сомнение известность файлов не очень продуктивно, ведь это 2011 год, мы живем в эпоху GMail.
Люк Стэнли

Ответы:

0

Если файлы, которые вы хотите сжать, находятся в каталоге, <directory>а архив, который вы хотите создать <archive>, вы можете:

find <directory> -type f -exec zip -g <archive> {} \; -exec rm {} \;

или с 7за:

find <directory> -type f -exec 7za a <archive> {} \; -exec rm {} \;
jfg956
источник
Это не сломает задачу (НЕОБХОДИМО, ЕСЛИ НИЗКО НА ПРОСТРАНСТВЕ!) ИЛИ проверка ошибок.
Люк Стэнли
На самом деле, это разбивает задачу, так как файлы добавляются один за другим в архив (1-й exec) и удаляются после добавления и перед добавлением следующего файла (2-й exec). Для проверки ошибок 1-й exec вернет true, если zip of 7za вернет код ошибки 0, в противном случае - false. Если возвращается false, следующий exec не должен выполняться. Очевидно, вы должны проверить это, прежде чем доверять этому.
jfg956
Возможно, под «срывом задачи» вы имели в виду создание множества архивов. Однако это затрудняет поиск нужного JPG, поскольку вам придется проверять множество архивов или создавать индекс. Вы пытались сжать файл один за другим, и это экономит ли вам достаточно места? Возможно, лучшим решением было бы сжатие файловой системы ...
jfg956
Я думаю, что упущенный здесь момент заключается в том, что, поскольку файлы очень похожи, можно определить некоторую избыточность, сгруппировав некоторые из них в tar и затем сжав их. К сожалению, поскольку jpeg сам по себе сжат, разница в один бит в начале файла сделает его несопоставимым с другим. В противном случае команда xz -9 * будет сжимать все файлы по отдельности. PNG, возможно, был лучше в качестве формата для скриншотов, которые не содержат ничего фотографического.
Энди Ли Робинсон