Распаковщик архивов под Debian

Михаил17 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
27.02.2013

Требуется скрипт для распаковки zip, rar, 7z, tar архивов на сервере. Сервер на debian 6. Язык программирования на ваш выбор.

Есть сайт с деревом файлов (типа проводника windows). Структура дерева хранится в mysql, файлы на диске. Требуется постоянно мониторить БД и, при появлении в дереве zip, rar, 7z, tar архива, распаковывать его. Распакованными файлами замещать сам архив в дереве, архив удалять Алгоритм такой:

1) Ищем архивы в БД и берем первый попавшийся

2) Распаковываем

3) Создаем в БД папку с именем архива в том же каталоге, где был архив.

4) Создаем в этой папке структуру файлов из архива

5) Удаляем архив с диска и БД

6) Переходим к пункту 1

Таким образом, должны быть распакованы все архивы, включая вложенные. Если архивов больше нет, скрипт должен просто ждать появления новых.

Нужно учесть:

• Если архив не удалось распаковать (поврежден или не хватает частей многотомного архива), то он должен быть удален + сообщение об этом должно быть добавлено в специальную таблицу в БД.

• Если в архиве есть файлы больше 50Мб, они должны быть удалены + сообщение об этом должно быть добавлено в специальную таблицу в БД. Должна быть возможность изменить предельный размер файлов (50Мб) в настройках скрипта.

• В архивах может быть несколько файлов с одинаковым именем в одной папке. При распаковке нужно добавлять к имени дублей “ 1”, “ 2”, “ 3” и т.д.

• В папке, где находился архив до распаковки, может уже быть папка с именем архива. Соответственно к создаваемой папке нужно добавить “ 1”, “ 2”, “ 3” и т.д.

• При распаковке удалять файлы Thumbs.db (это кеш предпросмотра виндового проводника)

• При распаковке удалять файлы, которые начинаются с символов ~$ (это временные файлы MS Office) Например “~$анц кухня.doc”

• Нужно учитывать, что пользователи непрерывно продолжают работать с деревом на сайте и архив в любой момент может быть перемещен или удален. Соответственно замена архива в БД на распакованную папку должна производиться в последний момент. Если архив был перемещен во время распаковки, то поместить распакованные файлы нужно в новое местоположение. Если архив был удален, то нужно удалить распакованные файлы.

• Нужно обойти такой хак. В архиве может быть файл на несколько терабайт забитый нулями. Сам архив при этом будет довольно маленьким и подвоха не заметить. Но при распаковке место на сервере кончится и сервер ляжет.

Заявки фрилансеров