Windows 上 Ubuntu 上的 Bash - 在 Windows 中更新文件后文件变得不可见

Windows 上 Ubuntu 上的 Bash - 在 Windows 中更新文件后文件变得不可见

我在 Windows 上的 Ubuntu 上使用 Bash 时遇到了一个问题:当我使用一些基于 Windows 的软件(例如 notepad++)编辑位于 Bash 主目录 C:\Users\me\AppData\Local\lxss\home\me\ 中的文件时,Bash 不再看到该文件。

因此,如果我使用 Bash 在主目录中创建一个文件,然后使用 Windows 编辑同一个文件,Bash 就看不到它了。将文件从 Windows 复制粘贴到主目录中也是一样,Bash 也看不到它。

有什么办法可以让这些文件对 Bash 可见吗?

PS Windows 目录中的文件和更改始终可以通过 /mnt/c/... 从 Bash 中看到,并且在编辑和移动文件后仍然可见

答案1

最简单的解决方案是在编辑之前将文件复制到不同的目录,然后在编辑之后将它们复制到原始位置。

看一下这个问题:Windows Linux 子系统 - 访问 Ubuntu 之外的文件

它参考了该BashOnWindows项目的 GitHub 项目。具体来说Issue 402或者更具体地说此评论内容如下:

@ducminhnguyen——根据其他票据的讨论,不支持直接从 Windows 复制到 Linux 子系统。AppData 下某个地方(我忘了在哪里)有一个目录,似乎包含 WSL 文件系统的文件。但是,如果您将新文件放在那里,或修改那里的现有文件,您的更改不会在 WSL 中正确反映出来。

我最好的猜测是,Linux 需要存储与 Windows 不同的文件元数据(以及更多的缓存信息等,因为它的磁盘缓冲模型也不同),并且当前是通过将 Linux 文件系统结构的主副本存储在某种数据库中来实现的,并且仅使用 Windows 文件系统作为该数据库的便捷 BLOB 存储。

如果您确实需要这样做,一种解决方法是编写一个拖放 .bat 脚本或类似执行 bash.exe -c "mv %1 /home/$USER/" 的脚本。(您可能需要使用 sed 和 tr 进行一些巧妙的工作,才能将 %1 转换为有效的 WSL 路径。)

或者——您可以将文件放在 Windows 目录中,然后在 WSL 中执行“cd ~; ln -s /mnt/c/path/to/my/files”以使它们出现在您的 WSL 主目录中?

相关内容