n1ro°
RU

Компьютеры · Инструкция

wslpath: как преобразовать пути Windows и Linux в WSL

wslpath преобразовать путь Windows в Linux позволяет без ручного хардкода /mnt/c и учитывает текущую конфигурацию WSL.

Редакция N1RO · Проверено

Короткий ответ

Как пользоваться wslpath в WSL: Windows → Linux, Linux → Windows, ключи -w, -m и -a, пути с пробелами и типичные ошибки.

Когда нужен wslpath, а не ручная замена C:\ на /mnt/c

В WSL один и тот же файл может иметь два разных представления пути: Windows-программа ожидает строку вроде C:\Users\alex\project\file.txt, а Linux-команда — /mnt/c/Users/alex/project/file.txt. Простая замена обратных слешей на прямые работает только в самых очевидных случаях и ломается, если точка монтирования Windows-дисков изменена через /etc/wsl.conf, путь содержит пробелы или файл лежит не на NTFS-диске, а внутри Linux-файловой системы дистрибутива. Для таких ситуаций нужен wslpath: утилита знает текущую схему интеграции WSL и переводит путь в форму, понятную другой стороне. Это особенно полезно в shell-скриптах, Makefile, npm-скриптах и командах, где Linux-инструмент должен передать файл Windows-приложению или наоборот. Если путь используется только внутри Linux, конвертировать его не нужно: лишнее преобразование усложняет скрипт и может скрыть ошибку в логике выбора файловой системы.

Совет: Не хардкодьте /mnt/c в автоматизации, если путь должен работать на машинах с изменённым root для DrvFs.

Как преобразовать путь Windows в путь WSL

  1. Откройте нужный дистрибутив WSL и передайте Windows-путь в кавычках: wslpath 'C:\Users\alex\My Project\app.log'. Кавычки обязательны, если в пути есть пробелы. По умолчанию wslpath преобразует Windows-путь в Linux-форму. При стандартном автомонтировании результат будет похож на /mnt/c/Users/alex/My Project/app.log.
  2. Если исходный путь относительный, а вызывающей команде нужен абсолютный, добавьте -a. Это полезно в скриптах, которые затем передают результат другой программе и не могут полагаться на текущий каталог. После преобразования проверьте существование файла обычной командой test -e или ls, чтобы отличить ошибку пути от отсутствующего файла.
  3. Если путь приходит из переменной, не убирайте кавычки вокруг подстановки: linux_path=$(wslpath "$win_path"). Без кавычек shell разделит строку по пробелам и спецсимволам ещё до запуска wslpath. Для пакетной обработки лучше конвертировать каждое значение отдельно, а не склеивать несколько путей в одну строку.

Предупреждение: Для путей с пробелами проблема обычно не в wslpath, а в потере кавычек при подстановке переменной.

Как получить Windows-путь из Linux-пути

Обратное преобразование выполняется ключом -w: wslpath -w /home/alex/project/report.csv. Для файла внутри Linux-файловой системы результат обычно будет UNC-путём через \wsl.localhost\<дистрибутив>\.., который могут открыть современные Windows-приложения. Если файл находится на смонтированном диске Windows, например /mnt/c/Work/report.csv, результат будет обычным путём C:\Work\report.csv. Ключ -m выдаёт Windows-представление с прямыми слешами, например C:/Work/report.csv. Такой формат удобен для некоторых кроссплатформенных CLI и конфигурационных файлов, где обратный слеш воспринимается как escape-символ. Не путайте -w и -m: оба переводят Linux-путь в сторону Windows, но формат разделителей отличается. Передавать UNC-путь старому приложению стоит после проверки: отдельные программы умеют работать только с дисковыми буквами и не принимают сетевые пути.

Совет: Если Windows-программа не открывает путь из /home, временно скопируйте файл на /mnt/c/.. и передайте уже дисковый путь.

Ключи wslpath, которые нужны чаще всего

  • без ключа / -u. Windows → WSL. wslpath 'D:\Data\a.txt'
  • -w. WSL → Windows, обратные слеши. wslpath -w /home/alex/a.txt
  • -m. WSL → Windows, прямые слеши. wslpath -m /mnt/c/Work
  • -a. сделать результат абсолютным. wslpath -a './data/a.txt'

Почему путь может существовать в Windows и не находиться в WSL

Первая причина — изменённый корень автомонтирования. По умолчанию C: виден как /mnt/c, но параметр root в секции [automount] файла /etc/wsl.conf может перенести диски, например в /c или /win/c. Вторая причина — диск вообще не смонтирован автоматически: параметр enabled=false отключает стандартное подключение фиксированных дисков. Третья причина — различия в правах, регистре имён и специальных символах. WSL и Windows взаимодействуют тесно, но это не означает, что каждая строка пути взаимозаменяема. Четвёртая причина — файл находится внутри Linux ext4/VHDX. У него нет эквивалента вида C:\.., поэтому Windows получает UNC-путь к дистрибутиву. Наконец, скрипт может выполняться не в том дистрибутиве WSL, для которого вы ожидали путь. Если путь участвует в автоматизации, полезно логировать исходное и преобразованное значение, а затем отдельно проверять доступность файла.

Важно: Не переносите Linux-проекты на /mnt/c только ради удобного пути: для Linux-инструментов это может ухудшить I/O-производительность.

Как использовать wslpath в автоматизации без скрытых ошибок

В скриптах полезно отделять перевод пути от запуска целевой программы. Сначала получите значение в отдельную переменную, выведите его в диагностический лог при ошибке, затем передавайте дальше. Например, Windows-путь из переменной среды можно преобразовать один раз, а не повторять wslpath в каждой ветке сценария. Если команда возвращает путь, который затем попадает в JSON, YAML или аргумент PowerShell, учитывайте второй уровень экранирования: корректная строка для shell ещё не гарантирует корректность внутри другого формата. Для пакетных задач не предполагайте, что все входы относятся к одному диску. Один путь может вести на C:, другой — на D:, третий — в Linux home. Именно поэтому wslpath надёжнее собственного regex. При отладке сравнивайте не только текст результата, но и конечное действие: может ли целевая программа реально открыть файл, и под тем ли пользователем она запущена.

Проверка перед использованием пути в скрипте

  • Убедитесь, что команда запускается именно внутри WSL и wslpath доступен в PATH; если автоматизация стартует из Windows, сначала явно выберите дистрибутив через wsl.exe.
  • Заключайте переменные с путями в двойные кавычки, особенно если имя каталога содержит пробелы, скобки или символы & и #.
  • Для Windows-приложения решите заранее, какой формат оно принимает: обычный C:\.., UNC через \wsl.localhost или вариант с прямыми слешами от wslpath -m.
  • После конвертации проверяйте существование объекта отдельно. Успешное преобразование строки не доказывает, что файл или каталог действительно существует и доступен текущему пользователю.

Что учитывать

Первая причина — изменённый корень автомонтирования. По умолчанию C: виден как /mnt/c, но параметр root в секции [automount] файла /etc/wsl.conf может перенести диски, например в /c или /win/c. Вторая причина — диск вообще не смонтирован автоматически: параметр enabled=false отключает стандартное подключение фиксированных дисков. Третья причина — различия в правах, регистре имён и специальных символах. WSL и Windows взаимодействуют тесно, но это не означает, что каждая строка пути…

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. WSL interop — Windows and Linux integration). Пример и формулировки — редакция N1RO на 2026-09-21.