从Windows复制文件到Windows子系统Linux(WSL)

195
我已启用开发人员模式并安装了在Windows上的Ubuntu中的Bash。
我的主目录可以在%localappdata%\Lxss\home\下找到,我创建了一个名为Pictures的子目录,完整路径应该如下:
在Windows上:C:\Users\\AppData\Local\lxss\home\\Pictures
在Bash上:/home//Pictures
如果我使用命令touch hello.txt从Bash中创建文件,则可以自由地在Windows UI中查看此文件并将其复制到桌面。但是,如果我从Windows UI中创建新的文本文件并将其保存在C:\Users\\AppData\Local\lxss\home\\Pictures中,即使我重新启动Bash或Windows,当我执行ls -l时,该文件也不可见。
为什么bash无法看到在Windows端创建的文件位于其自己的主目录中?
编辑 使用/mnt/c不是解决方案,我正在尝试理解为什么它看不到那些文件,以及是否有一种方法来解决这个问题,以便它将能够查看UI创建的文件,而不是尝试使用终端复制粘贴或移动文件。

2
有趣!我的猜测 - 只是猜测 - 是Linux子系统跟踪自己的文件,并且从不查看是否添加了其他文件。这样做似乎有点合理,因为否则很难为虚拟文件系统提供UNIX语义,例如删除文件和区分大小写。我怀疑如果你从Bash创建hello.txtHELLO.TXT,当你在Windows中查看它时,其中一个文件将使用不同的名称。 - Harry Johnston
1
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。另请参阅我应该在哪里发布有关Dev Ops的问题? - jww
1
@OmG 许多问题并不严格属于一个站点。然而,这更适合[su],因为涉及到两个不同的操作系统。(或者严格来说,只涉及Windows。) - jpaugh
2
@jpaugh 我知道。但是,这个问题是合理提出的——针对Ubuntu环境,而且不属于离题。 - OmG
1
@LeeGoddard WSL 不仅仅是用于开发。根据你的推理,因为我在 Windows 和 MacOS 上开发,所有关于 Windows 和 MacOS 的问题也将是相关主题。但实际上并非如此。 - Mark Rotteveel
显示剩余8条评论
2个回答

346

你应该能够在/mnt目录下访问Windows系统。例如,在bash中使用以下命令可进入图片目录:

你应该能够在/mnt目录下访问Windows系统。例如,在bash中使用以下命令可进入图片目录:

cd /mnt/c/Users/<windows.username>/Pictures

我相信你误解了。我在桌面上有一张JPG图片,我用UI将它复制到bash子系统目录中。我试图理解为什么当它们在bash的主目录中时,bash看不到这些图片。这是基本的cygwin行为,拖放或复制粘贴文件而不依赖于Linux命令来完成工作。 - JordanGS
你可能在错误的文件夹中。 - zoecarver
Linux子系统的设计标准与Cygwin不同,不能保证它们的行为相似。 - Harry Johnston
它对我有效,尽管ubuntu.username不一定是Windows的用户名..至少在我的情况下不是 ;) - Taktech
@JordanGS 这可能是一个权限问题。 - Janac Meena
请注意,在wsl2中,这将导致访问变慢。 - undefined

73

您应该只从WSL内部访问Linux文件系统(位于lxss文件夹中);不要在Windows中创建/修改lxss文件夹中的任何文件——这很危险,WSL将看不到这些文件。

但是,可以在WSL和Windows之间共享文件;将文件放在lxss文件夹之外。您可以通过drvFS(/mnt)来访问它们,例如在WSL中使用/mnt/c/Users/yourusername/files。这些文件在WSL和Windows之间保持同步。

有关详细信息和原因,请参见:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/


另请参阅WSL文件系统支持 - Harry Johnston
1
WSL文件系统支持中,它描述了为什么会出现这种行为:文件“翻译”仅在lsxx子系统(在Linux侧)中完成。 - Chris Buck
1
在Linux虚拟机上,我可以使用SFTP传输文件,那么我该如何正确地从Windows传输文件到Linux子系统?这并没有提供解决方案。 - Ambroise Rabier
1
在最新版本的WSL中,可以使用SFTP、tar文件或集成的9p协议。 - reker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接