问题
要访问最近下载的文件,我需要:
- 导航至 Windows 下载位置
mv
文件返回到 WSL 主位置
我尝试过的方法
- 在 Chrome 中更改下载位置:这不直观,因为我看到的是 Windows 风格的文件路径
C:\
。不清楚如何提供基于 Linux 的文件路径home/geoff
问题
有没有更简单的方法来访问最近下载的文件?
答案1
今天遇到的一个老问题,所以又提出了一个新答案。
其他答案各自都存在一些问题,在我看来,这些问题使得它们对于所问的问题来说不是最优的:
有没有更简单的方法来访问最近下载的文件(来自 WSL)?
在我看来,最简单的方法就是在 WSL 中创建一个指向 Windows 下载文件夹的符号链接:
ln -s /mnt/c/Users/<windows_username>/Downloads ~/downloads
然后,您可以直接在 WSL 中的文件夹中访问所有 Windows 下载~/downloads
。
注意:我不鼓励使用其他(当前)答案的原因:
移动文件事后执行并不是一个坏选择,但这只是多了一个步骤。而且,正如所写,它只适用于最近下载的文件。如果您要下载多个文件,则必须在每次下载后手动执行。
我想为我最近在@harrymc 的回答。我肯定没有仔细阅读。此路径 (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
我喜欢如上所述创建 shell 函数的想法,但也可以将默认下载文件夹设置为:
\\wsl.localhost\DISTRIBUTION\home\USERNAME\Downloads
至少,这对于我在 Vivaldi(类似 Chrome 的浏览器)上来说是有效的。
答案4
警告:尽管 Windows 实用程序可以轻松地将文件下载到 WSL 文件夹中,但请不要尝试直接下载到这些文件夹(位于 下)%LOCALAPPDATA%\Packages
。
微软文章 不要使用 Windows 应用和工具更改 Linux 文件 解释说 WSL Linux 使用自己的元数据,而不是 Windows 的有关文件的信息。这意味着使用 Windows 创建的文件很可能会在 Linux 中显示为空文件且没有权限。
微软一直致力于 Windows 和 WSL Linux 的相互兼容,但 2023 年距离完全兼容似乎还有很长的路要走。