Ваше использование createSymbolicLink имеет две проблемы: как указывает RealSkeptic, ваши первые два параметра меняются местами (они не должны быть в том же порядке, что и команда ln -s
);и в отличие от ln -s
, адресат может не быть каталогом, это должен быть полный путь без каталога.
Однако для копирования существующей символической ссылки вы нена самом деле хотите Files.createSymbolicLink.Вы хотите скопировать саму ссылку, что можно сделать, указав LinkOption.NOFOLLOW_LINKS в обычную копию.
Из документации Files.copy :
NOFOLLOW_LINKS
Символические ссылки не выполняются.Если файл является символической ссылкой, то копируется сама символическая ссылка, а не цель ссылки.
Итак, вы хотите что-то вроде этого:
Files.copy(
Paths.get("/home/user/Desktop/mysymlink"),
Paths.get("/home/user/Desktop/destination", "mysymlink"),
LinkOption.NOFOLLOW_LINKS,
StandardCopyOption.REPLACE_EXISTING);
(Обратите внимание, что правильный путь для получения пути заключается в Paths.get , или, какJava 11, Path.of . Нет причин использовать java.io.File.)