Проблема
Чтобы получить доступ к недавно загруженному файлу, мне нужно:
- перейдите к месту загрузки Windows
mv
подать обратно в домашнюю папку WSL
Что я пробовал
- Изменить место загрузки в Chrome: это не интуитивно понятно, потому что меня встречают пути к файлам в стиле Windows
C:\
. Непонятно, как задать путь к файлу на основе Linuxhome/geoff
Вопрос
Есть ли более простой способ получить доступ к недавно загруженным файлам?
решение1
Старый вопрос, который был поднят сегодня, поэтому добавлю еще один новый ответ.
Остальные ответы имеют некоторые недостатки, которые, на мой взгляд, делают их неоптимальными для поставленного вопроса:
Есть ли более простой способ получить доступ к недавно загруженным файлам (из WSL)?
IMHO, самый простой способ сделать это — просто создать символическую ссылку в WSL на папку загрузок Windows:
ln -s /mnt/c/Users/<windows_username>/Downloads ~/downloads
После этого все ваши загрузки Windows будут напрямую доступны в вашей ~/downloads
папке в WSL.
Примечание: Причины, по которым я не рекомендую использовать другие (текущие) ответы:
Перемещение файлаpost-the-fact — не плохой вариант, но это просто еще один шаг. Он также, как написано, работает только для последнего загруженного файла. Если вы загружаете несколько файлов, его придется выполнять вручную после каждой загрузки.
Я хотел бы извиниться за свой недавний голос за@harrymc's ответ. Я определенно не прочитал его достаточно внимательно. Этот путь (a) доступен только в WSL1, но даже тогда (b) никогда не следует использовать, так как он, скорее всего,вызвать повреждение файловой системы.
Изменение места загрузки по умолчаниюв браузере, конечно, работает, и я приветствую хороший вкус использования Vivaldi, но большинство пользователей, вероятно, не захотят загружатьвсефайлы в WSL, только избранные.
Также обратите внимание, что загрузка напрямую в папку из Vivaldi (из личного опыта) имеет интересный побочный эффект. Когда Vivaldi (и, возможно, другие браузеры, но я не уверен) запускается, он сканирует список недавно загруженных файлов и, похоже, фактически выполняет над ними некую операцию «чтения». Если есть файл, который был напрямую загружен в путь
\\wsl.localhost\<distro>
, доступ к этому файлу приведет к запуску самого дистрибутива WSL.Единственная причина, по которой я это заметил, заключалась в том, что у меня была
debugShell=true
установлена (теперь устаревшая) опция WSL в моем.wslconfig
. Это приводит к открытию окна отладки при каждом запуске WSL. Мне потребовалось несколько дней, чтобы выяснить, почему WSL запускался вскоре после перезагрузки моего компьютера ;-).
решение2
Есть ли более простой способ получить доступ к недавно загруженным файлам?
Решение
- мы можем найти WSL-переведенный путь загрузки Windows
- переместить последнюю загрузку в текущее местоположение
добавьте эту функцию в .zshrc или .bashrc
getRecentDownload() {
windowsDownloadsLocation="/mnt/c/Users/<your_username>/Downloads"
fileNameRecentDownload=$(ls -Art $windowsDownloadsLocation | tail -1)
mv "$windowsDownloadsLocation/$fileNameRecentDownload" .
}
Как использовать
source
требуется только при первом использовании
geoff@DESKTOP-DSQFUUU:~$ source ~/.bashrc
geoff@DESKTOP-DSQFUUU:~$ getRecentDownload
решение3
Мне нравится идея создания функции оболочки, как упомянуто выше, но также можно задать папку загрузки по умолчанию:
\\wsl.localhost\DISTRIBUTION\home\USERNAME\Downloads
По крайней мере, у меня это работает в Vivaldi (браузер, похожий на Chrome).
решение4
Предупреждение: Хотя утилиты Windows могут легко загружать файлы в папки WSL, не пытайтесь загружать их напрямую в эти папки, которые находятся в %LOCALAPPDATA%\Packages
.
Статья Microsoft Не изменяйте файлы Linux с помощью приложений и инструментов Windows. объясняет, что WSL Linux использует собственные метаданные, а не информацию Windows о файлах. Это означает, что файл, созданный в Windows, скорее всего, будет отображаться в Linux как пустой и с нулевыми разрешениями.
Microsoft работает над взаимной совместимостью Windows и WSL Linux, но в 2023 году, похоже, до полной совместимости еще далеко.