You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下WSL Bash目录不自动刷新问题求助

WSL Bash 与 Windows 文件管理器目录不同步的解决方法

这个问题我之前也碰到过,批量移动文件时每次都要重启WSL太折腾了!本质原因是WSL为了提升访问Windows文件系统的性能,会缓存目录结构和文件元信息,当你在Windows资源管理器里修改文件/文件夹时,WSL的缓存不会自动更新,所以执行ls看不到变化,甚至会提示文件不存在。下面给你几个可行的解决办法:

一、临时手动刷新缓存

如果只是偶尔遇到这个问题,不想改配置,可以执行这条命令强制释放缓存:

echo 3 | sudo tee /proc/sys/vm/drop_caches

执行完之后再跑ls -la,就能看到Windows端新增/修改的文件了。这条命令会清除页缓存、目录项和inode缓存,是临时生效的,下次遇到同样问题还得再跑一遍。

二、配置WSL自动同步(永久生效)

这个方法需要修改WSL的配置文件,让它实时或者低延迟同步Windows文件系统的变化,分WSL 1和WSL 2两种情况:

针对WSL 1

  1. 在Bash里编辑/etc/wsl.conf文件(如果没有就新建一个):
sudo nano /etc/wsl.conf
  1. 把下面的内容粘贴进去:
[automount]
options = "metadata,umask=0022,fmask=0133,cache=none"

cache=none会关闭WSL对Windows目录的缓存,让两边实时同步,代价是访问Windows文件系统的速度会略有下降,但日常使用基本感知不到。

针对WSL 2

WSL 2用的是虚拟机内的ext4文件系统,挂载Windows目录用的是9P协议,默认有1秒左右的缓存延迟。同样编辑/etc/wsl.conf:

sudo nano /etc/wsl.conf

粘贴以下内容:

[automount]
options = "metadata,umask=0022,fmask=0133,cache=loose"

cache=loose是平衡性能和实时性的选项,缓存时间很短,基本能做到接近实时同步;如果追求完全实时,也可以把cache=loose改成cache=none,但性能损耗会大一点。

  1. 保存配置后,需要关闭并重启WSL才能生效:
    在Windows的PowerShell或者CMD里执行:
wsl --shutdown

然后重新打开Cmder的Bash终端,之后Windows端修改文件后,WSL里马上就能用ls看到变化了。

三、小技巧:触发缓存刷新(不一定每次有效)

有时候可以通过切换目录的方式触发缓存更新,比如先回到父目录再切回来:

cd .. && cd SQL

这个方法偶尔管用,但可靠性不如前面两种,适合临时应急用。


附你提供的操作前后示例:
添加新文件前:

ls -la
total 0
drwxrwxrwx 1 sili sili 4096 Jun 1 18:38 .
drwxr-xr-x 1 sili sili 4096 Jun 1 18:38 ..
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 info.php
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 test.sql
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 text.txr

在资源管理器中创建新元素后(未刷新时):

:~/SQL$ ls -la
total 0
drwxrwxrwx 1 sili sili 4096 Jun 1 18:38 .
drwxr-xr-x 1 sili sili 4096 Jun 1 18:38 ..
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 info.php
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 test.sql
-rw-rw-rw- 1 sili sili 0 Jun 1 18:37 text.txr

内容的提问来源于stack exchange,提问作者Sili Jz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:07:45