Распаковщик архивов под Debian
Требуется скрипт для распаковки 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”
• Нужно учитывать, что пользователи непрерывно продолжают работать с деревом на сайте и архив в любой момент может быть перемещен или удален. Соответственно замена архива в БД на распакованную папку должна производиться в последний момент. Если архив был перемещен во время распаковки, то поместить распакованные файлы нужно в новое местоположение. Если архив был удален, то нужно удалить распакованные файлы.
• Нужно обойти такой хак. В архиве может быть файл на несколько терабайт забитый нулями. Сам архив при этом будет довольно маленьким и подвоха не заметить. Но при распаковке место на сервере кончится и сервер ляжет.