Как создать symlink или ярлык в windows с помощью python в смонтированной папке
Есть Убунту, у которой есть смонтированный диск /mnt/disk.
Этот disk - находится в среде windows и смонтирован с использованием протокола SMB.
Нужно делать ярлыки на папки с помощью скрипта, который запускается на Убунту таким образом, что бы они в windows нормально работали.
Пробовал так: os.symlink(src, dst). Но получаю ошибку: [Errno 95] Operation not supported
Если бы можно было ссылку (ярлык) создать как текстовый файл, то проблемы бы небыло.
Ответы (2 шт):
У вас диск смонтирован как drvfs, я полагаю. Драйвер drvfs не умеет создавать символические ссылки на SMB дисках.
Вам нужно монтировать диск как cifs с опцией mfsymlinks:
sudo mount -t cifs -o 'username=user,password=pwd,uid=1000,gid=1000,mfsymlinks' '//server/share' /mnt/disk
Здесь username и password - это логин и пароль пользователя на машине server
Ссылка создаётся как файл в формате Minshall+French
Формат - это техническая подробность. Для программ, работающих в WSL, MF-ссылки работают в точности как символические ссылки в Linux/Unix - их можно создавать, можно делать stat, можно разыменовывать.
В частности, os.symlink успешно создаёт ссылки.
Пример. Я смонтировал удалённую шару как cifs в каталог /mnt/w/
Создаю ссылку в python
python -c 'import os; os.symlink("/mnt/w/wget-log", "/mnt/w/zzz/some.txt")'
Проверяю ссылку ls -l /mnt/w/zzz/some.txt
lrwxrwxrwx 1 user user 15 Nov 15 18:49 /mnt/w/zzz/some.txt -> /mnt/w/wget-log
Печатаю содержимое файла по ссылке cat /mnt/w/zzz/some.txt
--2023-09-28 19:00:58-- https://...
bla-bla-bla
Ограничение: ссылка работает только в пределах шары. То есть внутри /mnt/w работает ссылка на /mnt/w/some_stuff, но не работает ссылка на /mnt/c/some_stuff
нормально в винде работают симлинки на соседний сервер с linux/samba mklink /D c:\path\to\symlink_name \server\share\path\to\dir
только про это не забывайте: fsutil behavior query SymlinkEvaluation