Сохранение прав доступа к файлам при распаковке в clojure

Я хочу распаковать файлы из zip-пакета, в котором могут быть текстовые и исполняемые файлы. Я выяснил способ использования взаимодействия Java для распаковки содержимого файла в заданном месте.

Тем не менее, после того, как все будет разархивировано в определенных местах, я не могу запустить исполняемые файлы, потому что разрешения не установлены как исполняемые файлы.

Я использую ZipInputStream и BufferedOutputStream из API Java, чтобы читать и писать соответственно. Я не думаю, что с моим кодом что-то не так, потому что я вижу побочный эффект и файлы распаковываются, как и ожидалось. Кроме того, я проверил разрешения для файлов, и ни один из исполняемых файлов не имеет разрешения x.

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

Могу ли я использовать команду unzip? Или есть другой рекомендуемый способ?

Благодарю.

1 ответ

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

Если используемая вами библиотека дает вам доступ к разрешениям, которые были сохранены для данного файла в архиве, то было бы довольно просто сбросить разрешения для файла после того, как вы закончили писать его.

Не забывайте о безопасности, если вы распаковываете файлы, предоставленные кем-то другим.

Другие вопросы по тегам