在 WSL 和 Windows 之间移动文件

在 WSL 和 Windows 之间移动文件

这里的用户相对缺乏经验。

问题描述:我使用 Windows 笔记本电脑工作(由公司提供),其中我使用的是 Linux 的 Widows 子系统。我使用 Linux 的原因是因为我有几个脚本/工具只能在 Linux 上运行。我经常需要将文件从 Windows 移动到 Linux 或反之亦然。从命令行执行此操作需要一系列痛苦而漫长的 cd(s) 和 cd ..

有没有推荐的方法可以从 Linux 快速访问 Windows 文件夹,从 Windows 快速访问 Linux(例如 powershell)?主要用例之一是将文件从一个系统移动到另一个系统。

现在我明白了:

mv my_file new_path_to_my_file
  

Windows 中的完整路径很长,容易出错。

谢谢您的帮助!

答案1

在 WSL/bash 内创建指向您想要简化的 Windows 路径的符号链接。

hbo@quark:~$ cd
hbo@quark:~$ pwd
/home/hbo
hbo@quark:~$ ln -s  /mnt/c/Users/Howard\ Owen winhome
hbo@quark:~$ sudo ls winhome
 ...
 Contacts                NetHood
 Cookies                 Pictures
 Desktop                 PrintHood
 Documents               Recent
 Downloads              'Saved Games'
 Favorites               Searches'
 IntelGraphicsProfiles  'Start Menu'
 Links                   Templates
'Local Settings'         Videos
 Music                   ntuser.dat.LOG1
'My Documents'           ntuser.dat.LOG2
 NTUSER.DAT              ntuser.ini
hbo@quark:~$

答案2

从 WSL/Linux 访问 Windows 文件

与 Howard Owen 的回答一样,我使用符号链接(也称为“winhome”)指向我的 Windows 配置文件目录。但我不确定这是否回答了您的真正问题,因为听起来您需要访问的 Windows 目录并不是您的配置文件(基于“冗长且容易出错”的部分)。也就是说,您始终可以创建指向您需要的任何 Windows 目录的符号链接。

或者你可以创建一个绑定挂载。例如

sudo mkdir /mnt/project
sudo mount --bind /mnt/c/really/long/path/to/project /mnt/project
ls /mnt/project

话虽如此,从 Linux 访问 Windows 文件时有一个非常重要的考虑因素——WSL1 的速度比 WSL2 快 10 倍左右。您没有提到使用的是哪个版本,但我建议您确保至少为这些类型的文件操作安装了一个 WSL1 实例,特别是当工作负载涉及大量小文件时。

从 Windows 访问 Linux/WSL 文件系统上的文件

您特别提到了 PowerShell。要从 PowerShell 中的 Windows 驱动器创建到 WSL/Ubuntu 中目录的快捷方式,请从管理 PowerShell 会话执行以下操作:

Set-Location location\for\link
New-Item -Path project -ItemType SymbolicLink -Value \\wsl$\Ubuntu

... 其中project是您想要的快捷方式目录的名称,并且\\wsl$\Ubuntu取决于您的发行版名称(通过 获取wsl -l,但对于安装的第一个 Ubuntu 发行版,默认为“Ubuntu”)。

当然,如果您愿意,您也可以在 Windows 中轻松使用文件管理器(例如文件资源管理器,尽管我更喜欢 Directory Opus)。\\wsl$\Ubuntu只要 WSL 正在运行,伪共享就可用(但当 WSL 实例处于“已停止”状态时会消失)。

使用符号链接会创建一个有趣的案例,至少对我来说是这样。虽然我本来预计如果 WSL 未运行,访问将会失败,但似乎仅列出内容location\for\link\project就会导致 WSL 实例从“已停止”变为“正在运行”。所以这似乎不错。

其他选择

您可能还想了解“快速 CD”选项,如这篇博文。这些适用于 PowerShell 和大多数 Linux 发行版。Hanselman 提到的那个显然适用于两者。

相关内容