Сохранение прав доступа к файлам при распаковке в clojure
Я хочу распаковать файлы из zip-пакета, в котором могут быть текстовые и исполняемые файлы. Я выяснил способ использования взаимодействия Java для распаковки содержимого файла в заданном месте.
Тем не менее, после того, как все будет разархивировано в определенных местах, я не могу запустить исполняемые файлы, потому что разрешения не установлены как исполняемые файлы.
Я использую ZipInputStream и BufferedOutputStream из API Java, чтобы читать и писать соответственно. Я не думаю, что с моим кодом что-то не так, потому что я вижу побочный эффект и файлы распаковываются, как и ожидалось. Кроме того, я проверил разрешения для файлов, и ни один из исполняемых файлов не имеет разрешения x.
Конечно, я могу вместо этого запустить команду unzip, и это должно обо всем позаботиться, но я не уверен, на какой платформе будет работать программа. Итак, я думал, что программно разархивирую все.
Могу ли я использовать команду unzip? Или есть другой рекомендуемый способ?
Благодарю.
1 ответ
Если ваша программа создает файлы на диске, то именно эта программа несет ответственность за установку разрешений. Похоже, что каждый файл получает права доступа к файлу по умолчанию, которые не включают установку исполняемого бита.
Если используемая вами библиотека дает вам доступ к разрешениям, которые были сохранены для данного файла в архиве, то было бы довольно просто сбросить разрешения для файла после того, как вы закончили писать его.
Не забывайте о безопасности, если вы распаковываете файлы, предоставленные кем-то другим.