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

В настоящее время я разрабатываю кросс-платформенное приложение (Windows, Mac OS X, Linux) с Java и создаю проект для Windows. В процессе сборки я создаю сценарий оболочки для 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

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


person salocinx    schedule 20.08.2014    source источник


Ответы (2)


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

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

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

umask u+x

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

tar cfp file.tar <scripts>

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

person Elliott Frisch    schedule 20.08.2014
comment
Хорошо, я просто соберу проект на Linux, а затем упакую весь проект в файл *.tar.gz, чтобы распространить его на другие машины на базе Linux и Mac. Спасибо за подсказки! - person salocinx; 20.08.2014

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

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

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

person Karol S    schedule 20.08.2014