Как сохранить права доступа к файлам с Java в разных операционных системах?

В настоящее время я разрабатываю кроссплатформенное приложение (Windows, Mac OS X, Linux) на Java и строю проект на Windows. В процессе сборки я создаю shell-скрипт для Linux, чтобы "обернуть" исполняемый jar-файл.

Я установил исполняемый бит сценария оболочки следующим образом:

File script = new File("run.sh");
script.setExecutable(true);

Но при переносе файла run.sh в Linux я всегда получаю следующие разрешения:

-rw-r--r-- 1 salocinx salocinx 120 2014-08-20 20:21 run.sh

Кто-нибудь знает, как сохранить х-бит из Windows в Linux?

2 ответа

Решение

Ваша программа передачи файлов будет нуждаться в опции сохранения разрешений. Я не думаю, что вы найдете его. Вы можете запустить свою программу в окне Unix, чтобы изменить права доступа к файлу, или вы можете запустить find команда как

find . -name "*.sh" -exec chmod a+x {} \;

Или вы можете попробовать установить свой umask,

umask u+x

Или (если вы используете Cygwin), вы можете использовать tar с

tar cfp file.tar <scripts>

Обратите внимание, что p это сохранить разрешения.

setExecutable ничего не делает в Windows, возвращает false, если не получается, вы можете проверить.

Файловые системы Windows не имеют понятия о исполняемом разрешении.

Какие разрешения имеют файлы после передачи в Linux, зависит от программы, которую вы использовали для их передачи, но обычно они равны 600 или 644. Чтобы решить эту проблему, вы должны установить исполняемый бит под Unix-подобной операционной системой на подходящей файловая система.

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